- build: somewhat polished dockerization setup - build: io/fs migrations with `golang-migrate` - feat: automatic init. admin account creation (.env creds) - feat(routers): combined user & token routers into single auth router - feat(routers): improved route layouts (`Routes`) - feat(middlewares): removed redundant `userCtx` middleware - fix(schema): note <-> note_versions relation (versioning) - feat(queries): removed redundant rollback functionality - feat(queries): combined duplicate version check & insertion/creation - tests: decreased redundancy by removing 'unnecessary' unit tests - refactor: hid internal packages behind `server/internal` - docs: notes & auth handler comments
144 lines
3.2 KiB
Go
144 lines
3.2 KiB
Go
// Code generated by sqlc. DO NOT EDIT.
|
|
// versions:
|
|
// sqlc v1.28.0
|
|
// source: notes.sql
|
|
|
|
package data
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
const createNote = `-- name: CreateNote :one
|
|
INSERT INTO notes (user_id)
|
|
VALUES ($1)
|
|
RETURNING id, user_id, current_version, latest_version, created_at, updated_at
|
|
`
|
|
|
|
func (q *Queries) CreateNote(ctx context.Context, userID uuid.UUID) (Note, error) {
|
|
row := q.db.QueryRow(ctx, createNote, userID)
|
|
var i Note
|
|
err := row.Scan(
|
|
&i.ID,
|
|
&i.UserID,
|
|
&i.CurrentVersion,
|
|
&i.LatestVersion,
|
|
&i.CreatedAt,
|
|
&i.UpdatedAt,
|
|
)
|
|
return i, err
|
|
}
|
|
|
|
const deleteNote = `-- name: DeleteNote :exec
|
|
DELETE FROM notes
|
|
WHERE id = $1 AND user_id = $2
|
|
`
|
|
|
|
type DeleteNoteParams struct {
|
|
ID uuid.UUID `json:"id"`
|
|
UserID uuid.UUID `json:"user_id"`
|
|
}
|
|
|
|
func (q *Queries) DeleteNote(ctx context.Context, arg DeleteNoteParams) error {
|
|
_, err := q.db.Exec(ctx, deleteNote, arg.ID, arg.UserID)
|
|
return err
|
|
}
|
|
|
|
const getFullNote = `-- name: GetFullNote :one
|
|
SELECT
|
|
n.id AS note_id,
|
|
n.user_id AS owner_id,
|
|
nv.title,
|
|
nv.content,
|
|
nv.version_number,
|
|
nv.created_at AS version_created_at,
|
|
n.created_at AS note_created_at,
|
|
n.updated_at AS note_updated_at
|
|
FROM notes n
|
|
JOIN note_versions nv
|
|
ON n.id = nv.note_id AND n.current_version = nv.version_number
|
|
WHERE n.id = $1
|
|
`
|
|
|
|
type GetFullNoteRow struct {
|
|
NoteID uuid.UUID `json:"note_id"`
|
|
OwnerID uuid.UUID `json:"owner_id"`
|
|
Title string `json:"title"`
|
|
Content string `json:"content"`
|
|
VersionNumber int32 `json:"version_number"`
|
|
VersionCreatedAt *time.Time `json:"version_created_at"`
|
|
NoteCreatedAt *time.Time `json:"note_created_at"`
|
|
NoteUpdatedAt *time.Time `json:"note_updated_at"`
|
|
}
|
|
|
|
func (q *Queries) GetFullNote(ctx context.Context, id uuid.UUID) (GetFullNoteRow, error) {
|
|
row := q.db.QueryRow(ctx, getFullNote, id)
|
|
var i GetFullNoteRow
|
|
err := row.Scan(
|
|
&i.NoteID,
|
|
&i.OwnerID,
|
|
&i.Title,
|
|
&i.Content,
|
|
&i.VersionNumber,
|
|
&i.VersionCreatedAt,
|
|
&i.NoteCreatedAt,
|
|
&i.NoteUpdatedAt,
|
|
)
|
|
return i, err
|
|
}
|
|
|
|
const listNotes = `-- name: ListNotes :many
|
|
SELECT
|
|
n.id AS note_id,
|
|
n.user_id AS owner_id,
|
|
nv.title,
|
|
n.updated_at
|
|
FROM notes n
|
|
JOIN note_versions nv
|
|
ON n.id = nv.note_id AND n.current_version = nv.version_number
|
|
WHERE n.user_id = $1
|
|
ORDER BY n.updated_at DESC
|
|
LIMIT $2 OFFSET $3
|
|
`
|
|
|
|
type ListNotesParams struct {
|
|
UserID uuid.UUID `json:"user_id"`
|
|
Limit int32 `json:"limit"`
|
|
Offset int32 `json:"offset"`
|
|
}
|
|
|
|
type ListNotesRow struct {
|
|
NoteID uuid.UUID `json:"note_id"`
|
|
OwnerID uuid.UUID `json:"owner_id"`
|
|
Title string `json:"title"`
|
|
UpdatedAt *time.Time `json:"updated_at"`
|
|
}
|
|
|
|
func (q *Queries) ListNotes(ctx context.Context, arg ListNotesParams) ([]ListNotesRow, error) {
|
|
rows, err := q.db.Query(ctx, listNotes, arg.UserID, arg.Limit, arg.Offset)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
var items []ListNotesRow
|
|
for rows.Next() {
|
|
var i ListNotesRow
|
|
if err := rows.Scan(
|
|
&i.NoteID,
|
|
&i.OwnerID,
|
|
&i.Title,
|
|
&i.UpdatedAt,
|
|
); err != nil {
|
|
return nil, err
|
|
}
|
|
items = append(items, i)
|
|
}
|
|
if err := rows.Err(); err != nil {
|
|
return nil, err
|
|
}
|
|
return items, nil
|
|
}
|