68 lines
1.7 KiB
Go
68 lines
1.7 KiB
Go
package models
|
|
|
|
import (
|
|
"context"
|
|
"database/sql"
|
|
"screenmark/screenmark/.gen/haystack/haystack/model"
|
|
. "screenmark/screenmark/.gen/haystack/haystack/table"
|
|
|
|
. "github.com/go-jet/jet/v2/postgres"
|
|
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
type NoteModel struct {
|
|
dbPool *sql.DB
|
|
}
|
|
|
|
func (m NoteModel) List(ctx context.Context, userId uuid.UUID) ([]model.Notes, error) {
|
|
listNotesStmt := SELECT(Notes.AllColumns).
|
|
FROM(
|
|
Notes.
|
|
INNER_JOIN(UserNotes, UserNotes.NoteID.EQ(Notes.ID)),
|
|
).
|
|
WHERE(UserNotes.UserID.EQ(UUID(userId)))
|
|
|
|
locations := []model.Notes{}
|
|
|
|
err := listNotesStmt.QueryContext(ctx, m.dbPool, &locations)
|
|
return locations, err
|
|
}
|
|
|
|
func (m NoteModel) Save(ctx context.Context, userId uuid.UUID, note model.Notes) (model.Notes, error) {
|
|
insertNoteStmt := Notes.
|
|
INSERT(Notes.Name, Notes.Description, Notes.Content).
|
|
VALUES(note.Name, note.Description, note.Content).
|
|
RETURNING(Notes.AllColumns)
|
|
|
|
insertedNote := model.Notes{}
|
|
err := insertNoteStmt.QueryContext(ctx, m.dbPool, &insertedNote)
|
|
if err != nil {
|
|
return model.Notes{}, err
|
|
}
|
|
|
|
insertUserNoteStmt := UserNotes.
|
|
INSERT(UserNotes.UserID, UserNotes.NoteID).
|
|
VALUES(userId, insertedNote.ID)
|
|
|
|
_, err = insertUserNoteStmt.ExecContext(ctx, m.dbPool)
|
|
|
|
return insertedNote, err
|
|
}
|
|
|
|
func (m NoteModel) SaveToImage(ctx context.Context, imageId uuid.UUID, noteId uuid.UUID) (model.ImageNotes, error) {
|
|
insertImageNoteStmt := ImageNotes.
|
|
INSERT(ImageNotes.ImageID, ImageNotes.NoteID).
|
|
VALUES(imageId, noteId).
|
|
RETURNING(ImageNotes.AllColumns)
|
|
|
|
imageNote := model.ImageNotes{}
|
|
err := insertImageNoteStmt.QueryContext(ctx, m.dbPool, &imageNote)
|
|
|
|
return imageNote, err
|
|
}
|
|
|
|
func NewNoteModel(db *sql.DB) NoteModel {
|
|
return NoteModel{dbPool: db}
|
|
}
|