Create API for discarding file uploads

This commit is contained in:
Eli Ribble 2026-02-24 17:36:59 +00:00
parent c4e5369796
commit a776c83557
No known key found for this signature in database
3 changed files with 32 additions and 11 deletions

View file

@ -78,6 +78,7 @@ func Router() chi.Router {
r.Method("GET", "/upload/pool/create", authenticatedHandler(getUploadPoolCreate))
r.Method("POST", "/upload/pool/create", authenticatedHandlerPostMultipart(postUploadPoolCreate))
r.Method("GET", "/upload/{id}", authenticatedHandler(getUploadByID))
r.Method("POST", "/upload/{id}/discard", authenticatedHandlerPost(postUploadDiscard))
html.AddStaticRoute(r, "/static")
return r
@ -165,7 +166,7 @@ func authenticatedHandler[T any](f handlerFunctionGet[T]) http.Handler {
})
}
type handlerFunctionPost[T any] func(context.Context, *http.Request, *models.User, T) (string, *errorWithStatus)
type handlerFunctionPost[T any] func(context.Context, *http.Request, *models.Organization, *models.User, T) (string, *errorWithStatus)
func authenticatedHandlerPost[T any](f handlerFunctionPost[T]) http.Handler {
return auth.NewEnsureAuth(func(w http.ResponseWriter, r *http.Request, u *models.User) {
@ -183,7 +184,12 @@ func authenticatedHandlerPost[T any](f handlerFunctionPost[T]) http.Handler {
return
}
ctx := r.Context()
path, e := f(ctx, r, u, content)
org, err := u.Organization().One(ctx, db.PGInstance.BobDB)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
path, e := f(ctx, r, org, u, content)
if e != nil {
http.Error(w, e.Error(), e.Status)
return
@ -207,7 +213,12 @@ func authenticatedHandlerPostMultipart[T any](f handlerFunctionPost[T]) http.Han
return
}
ctx := r.Context()
path, e := f(ctx, r, u, content)
org, err := u.Organization().One(ctx, db.PGInstance.BobDB)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
path, e := f(ctx, r, org, u, content)
if e != nil {
http.Error(w, e.Error(), e.Status)
return

View file

@ -42,7 +42,7 @@ type FormEmail struct {
To string `schema:"emailTo"`
}
func postSudoEmail(ctx context.Context, r *http.Request, u *models.User, e FormEmail) (string, *errorWithStatus) {
func postSudoEmail(ctx context.Context, r *http.Request, org *models.Organization, u *models.User, e FormEmail) (string, *errorWithStatus) {
if u.Role != enums.UserroleRoot {
return "", &errorWithStatus{
Message: "You must have sudo powers to do this",
@ -71,7 +71,7 @@ type FormSMS struct {
Phone string `schema:"smsPhone"`
}
func postSudoSMS(ctx context.Context, r *http.Request, u *models.User, sms FormSMS) (string, *errorWithStatus) {
func postSudoSMS(ctx context.Context, r *http.Request, org *models.Organization, u *models.User, sms FormSMS) (string, *errorWithStatus) {
if u.Role != enums.UserroleRoot {
return "", &errorWithStatus{
Message: "You must have sudo powers to do this",

View file

@ -7,7 +7,6 @@ import (
"strconv"
"github.com/Gleipnir-Technology/nidus-sync/config"
"github.com/Gleipnir-Technology/nidus-sync/db"
"github.com/Gleipnir-Technology/nidus-sync/db/models"
"github.com/Gleipnir-Technology/nidus-sync/platform"
"github.com/Gleipnir-Technology/nidus-sync/userfile"
@ -64,10 +63,6 @@ func getUploadPoolCreate(ctx context.Context, r *http.Request, org *models.Organ
return newResponse("sync/pool-csv-upload.html", data), nil
}
func getUploadByID(ctx context.Context, r *http.Request, org *models.Organization, u *models.User) (*response[contentUploadDetail], *errorWithStatus) {
org, err := u.Organization().One(ctx, db.PGInstance.BobDB)
if err != nil {
return nil, newError("Failed to get organization: %w", err)
}
file_id_str := chi.URLParam(r, "id")
file_id_, err := strconv.ParseInt(file_id_str, 10, 32)
if err != nil {
@ -87,9 +82,24 @@ func getUploadByID(ctx context.Context, r *http.Request, org *models.Organizatio
return newResponse("sync/upload-by-id.html", data), nil
}
type FormUploadDiscard struct{}
func postUploadDiscard(ctx context.Context, r *http.Request, org *models.Organization, u *models.User, f FormUploadDiscard) (string, *errorWithStatus) {
file_id_str := chi.URLParam(r, "id")
file_id_, err := strconv.ParseInt(file_id_str, 10, 32)
if err != nil {
return "", newError("Failed to parse file_id: %w", err)
}
err = platform.UploadDiscard(ctx, org, int32(file_id_))
if err != nil {
return "", newError("Failed to mark discarded: %w", err)
}
return "/upload", nil
}
type FormUploadPool struct{}
func postUploadPoolCreate(ctx context.Context, r *http.Request, u *models.User, f FormUploadPool) (string, *errorWithStatus) {
func postUploadPoolCreate(ctx context.Context, r *http.Request, org *models.Organization, u *models.User, f FormUploadPool) (string, *errorWithStatus) {
uploads, err := userfile.SaveFileUpload(r, "csvfile", userfile.CollectionCSV)
if err != nil {
return "", newError("Failed to extract image uploads: %s", err)