package view import ( "github.com/valyala/fasthttp" "git.sr.ht/~gabrielgio/img/pkg/database/repository" "git.sr.ht/~gabrielgio/img/pkg/ext" "git.sr.ht/~gabrielgio/img/templates" ) type ( SettingsView struct { // there is not need to create a controller for this settingsRepository repository.SettingsRepository userRepository repository.UserRepository } ) 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 } templates.WritePageTemplate(ctx, &templates.SettingsPage{ Settings: s, Users: users, }) return nil } 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) }