package view import ( "github.com/valyala/fasthttp" "git.sr.ht/~gabrielgio/img" "git.sr.ht/~gabrielgio/img/pkg/database/repository" "git.sr.ht/~gabrielgio/img/pkg/ext" ) type ( SettingsView struct { // there is not need to create a controller for this settingsRepository repository.SettingsRepository userRepository repository.UserRepository } SettingsPage struct { Settings *repository.Settings Users []*repository.User } ) func NewSettingsView( settingsRespository repository.SettingsRepository, userRepository repository.UserRepository, ) *SettingsView { return &SettingsView{ settingsRepository: settingsRespository, userRepository: userRepository, } } func (self *SettingsView) Index(ctx *fasthttp.RequestCtx) error { s, err := self.settingsRepository.Load(ctx) if err != nil { return err } users, err := self.userRepository.List(ctx) if err != nil { return err } return img.Render(ctx, "settings.html", &img.HTMLView[*SettingsPage]{ Title: "Settings", Data: &SettingsPage{ Settings: s, Users: users, }, }) } func (self *SettingsView) Save(ctx *fasthttp.RequestCtx) error { var ( showMode = string(ctx.FormValue("showMode")) == "on" showOwner = string(ctx.FormValue("showOwner")) == "on" ) err := self.settingsRepository.Save(ctx, &repository.Settings{ ShowMode: showMode, ShowOwner: showOwner, }) if err != nil { return err } return self.Index(ctx) } func (self *SettingsView) SetMyselfIn(r *ext.Router) { r.GET("/settings/", self.Index) r.POST("/settings/", self.Save) }