package handlers import ( "errors" "net/http" "git.leonardobishop.net/stash/api/dto" "git.leonardobishop.net/stash/pkg/entries" ) func GetEntryURLs(service entries.Service) http.HandlerFunc { return dto.WrapResponseFunc(func(w http.ResponseWriter, r *http.Request) error { entries, err := service.GetEntryURLs() if err != nil { return err } return &dto.OkResponse{ Code: http.StatusOK, Data: entries, } }) } func GetEntry(service entries.Service) http.HandlerFunc { return dto.WrapResponseFunc(func(w http.ResponseWriter, r *http.Request) error { var request dto.GetEntryRequest if err := dto.ReadDto(r, &request); err != nil { return err } entry, err := service.GetEntryByUrl(request.Url) if err != nil { if errors.Is(err, entries.ErrEntryNotFound) { return &dto.ErrorResponse{ Code: http.StatusNotFound, Message: "entry not found", } } return err } return &dto.OkResponse{ Code: http.StatusOK, Data: entry, } }) } func RecordEntry(service entries.Service) http.HandlerFunc { return dto.WrapResponseFunc(func(w http.ResponseWriter, r *http.Request) error { var request dto.CreateEntryRequest if err := dto.ReadDto(r, &request); err != nil { return err } entry, err := service.CreateEntry(request.Title, request.Kind, request.Url, request.Description) if err != nil { return err } return &dto.OkResponse{ Code: http.StatusCreated, Data: entry, } }) } func UpdateEntry(service entries.Service) http.HandlerFunc { return dto.WrapResponseFunc(func(w http.ResponseWriter, r *http.Request) error { var request dto.UpdateEntryRequest if err := dto.ReadDto(r, &request); err != nil { return err } entry, err := service.UpdateEntryKind(request.Id, request.Kind) if err != nil { return err } return &dto.OkResponse{ Code: http.StatusOK, Data: entry, } }) } func DeleteEntry(service entries.Service) http.HandlerFunc { return dto.WrapResponseFunc(func(w http.ResponseWriter, r *http.Request) error { var request dto.DeleteEntryRequest if err := dto.ReadDto(r, &request); err != nil { return err } err := service.DeleteEntry(request.Id) if err != nil { return err } return &dto.OkResponse{ Code: http.StatusOK, Data: nil, } }) }