diff --git a/api/api.go b/api/api.go index d645d8ae..e612b195 100644 --- a/api/api.go +++ b/api/api.go @@ -1,7 +1,6 @@ package api import ( - "encoding/json" "fmt" "io" "net/http" @@ -10,78 +9,11 @@ import ( "time" "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/platform/background" - "github.com/Gleipnir-Technology/nidus-sync/platform/file" - "github.com/aarondl/opt/omit" - "github.com/aarondl/opt/omitnull" - "github.com/go-chi/chi/v5" "github.com/go-chi/render" - "github.com/google/uuid" "github.com/rs/zerolog/log" ) -func apiAudioPost(w http.ResponseWriter, r *http.Request, u platform.User) { - id := chi.URLParam(r, "uuid") - noteUUID, err := uuid.Parse(id) - if err != nil { - http.Error(w, "Failed to decode the uuid", http.StatusBadRequest) - return - } - - var payload NoteAudioPayload - body, err := io.ReadAll(r.Body) - if err != nil { - http.Error(w, "Failed to read the payload", http.StatusBadRequest) - return - } - if err := json.Unmarshal(body, &payload); err != nil { - //debugSaveRequest(body, err, "Audio note POST JSON decode error") - http.Error(w, "Failed to decode the payload", http.StatusBadRequest) - return - } - ctx := r.Context() - setter := models.NoteAudioSetter{ - Created: omit.From(payload.Created), - CreatorID: omit.From(int32(u.ID)), - Deleted: omitnull.FromPtr(payload.Deleted), - DeletorID: omitnull.FromPtr(payload.DeletorID), - Duration: omit.From(payload.Duration), - OrganizationID: omit.From(u.Organization.ID()), - Transcription: omitnull.FromPtr(payload.Transcription), - TranscriptionUserEdited: omit.From(payload.TranscriptionUserEdited), - Version: omit.From(payload.Version), - UUID: omit.From(noteUUID), - } - if err := platform.NoteAudioCreate(ctx, u, setter); err != nil { - render.Render(w, r, errRender(err)) - return - } - w.WriteHeader(http.StatusAccepted) -} - -func apiAudioContentPost(w http.ResponseWriter, r *http.Request, user platform.User) { - u_str := chi.URLParam(r, "uuid") - u, err := uuid.Parse(u_str) - if err != nil { - http.Error(w, "Failed to parse image UUID", http.StatusBadRequest) - return - } - err = file.FileContentWrite(r.Body, file.CollectionAudioRaw, u) - if err != nil { - log.Printf("Failed to write content file: %v", err) - http.Error(w, "failed to write content file", http.StatusInternalServerError) - } - ctx := r.Context() - a, err := models.NoteAudios.Query( - models.SelectWhere.NoteAudios.UUID.EQ(u), - models.SelectWhere.NoteAudios.OrganizationID.EQ(user.Organization.ID()), - ).One(ctx, db.PGInstance.BobDB) - background.NewAudioTranscode(ctx, db.PGInstance.BobDB, a.ID) - w.WriteHeader(http.StatusOK) -} - func handleClientIos(w http.ResponseWriter, r *http.Request, u platform.User) { var sinceStr string err := r.ParseForm() diff --git a/api/audio.go b/api/audio.go new file mode 100644 index 00000000..6849036f --- /dev/null +++ b/api/audio.go @@ -0,0 +1,79 @@ +package api + +import ( + "encoding/json" + "io" + "net/http" + + "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/platform/background" + "github.com/Gleipnir-Technology/nidus-sync/platform/file" + "github.com/aarondl/opt/omit" + "github.com/aarondl/opt/omitnull" + "github.com/go-chi/chi/v5" + "github.com/go-chi/render" + "github.com/google/uuid" + "github.com/rs/zerolog/log" +) + +func apiAudioPost(w http.ResponseWriter, r *http.Request, u platform.User) { + id := chi.URLParam(r, "uuid") + noteUUID, err := uuid.Parse(id) + if err != nil { + http.Error(w, "Failed to decode the uuid", http.StatusBadRequest) + return + } + + var payload NoteAudioPayload + body, err := io.ReadAll(r.Body) + if err != nil { + http.Error(w, "Failed to read the payload", http.StatusBadRequest) + return + } + if err := json.Unmarshal(body, &payload); err != nil { + //debugSaveRequest(body, err, "Audio note POST JSON decode error") + http.Error(w, "Failed to decode the payload", http.StatusBadRequest) + return + } + ctx := r.Context() + setter := models.NoteAudioSetter{ + Created: omit.From(payload.Created), + CreatorID: omit.From(int32(u.ID)), + Deleted: omitnull.FromPtr(payload.Deleted), + DeletorID: omitnull.FromPtr(payload.DeletorID), + Duration: omit.From(payload.Duration), + OrganizationID: omit.From(u.Organization.ID()), + Transcription: omitnull.FromPtr(payload.Transcription), + TranscriptionUserEdited: omit.From(payload.TranscriptionUserEdited), + Version: omit.From(payload.Version), + UUID: omit.From(noteUUID), + } + if err := platform.NoteAudioCreate(ctx, u, setter); err != nil { + render.Render(w, r, errRender(err)) + return + } + w.WriteHeader(http.StatusAccepted) +} + +func apiAudioContentPost(w http.ResponseWriter, r *http.Request, user platform.User) { + u_str := chi.URLParam(r, "uuid") + u, err := uuid.Parse(u_str) + if err != nil { + http.Error(w, "Failed to parse image UUID", http.StatusBadRequest) + return + } + err = file.FileContentWrite(r.Body, file.CollectionAudioRaw, u) + if err != nil { + log.Printf("Failed to write content file: %v", err) + http.Error(w, "failed to write content file", http.StatusInternalServerError) + } + ctx := r.Context() + a, err := models.NoteAudios.Query( + models.SelectWhere.NoteAudios.UUID.EQ(u), + models.SelectWhere.NoteAudios.OrganizationID.EQ(user.Organization.ID()), + ).One(ctx, db.PGInstance.BobDB) + background.NewAudioTranscode(ctx, db.PGInstance.BobDB, a.ID) + w.WriteHeader(http.StatusOK) +}