3 files changed,
31 insertions(+),
5 deletions(-)
Author:
Smirnov Olexandr
ss2316544@gmail.com
Committed by:
GitHub
noreply@github.com
Committed at:
2025-06-30 16:13:48 +0300
Parent:
b59aa76
M
e2e/apiv1_notes_test.go
@@ -268,7 +268,7 @@ e.readBodyAndUnjsonify(httpResp.Body, &bodyCreated)
// get metadata metaResp := e.httpRequest(http.MethodGet, "/api/v1/note/"+bodyCreated.Slug+"/meta", []byte{}) - e.Equal(metaResp.Code, http.StatusOK) + e.Equal(http.StatusOK, metaResp.Code) var metadata apiv1NoteMetadataResponse e.readBodyAndUnjsonify(metaResp.Body, &metadata)@@ -281,3 +281,24 @@ func (e *AppTestSuite) TestNoteV1_GetMetadata_notFound() {
metaResp := e.httpRequest(http.MethodGet, "/api/v1/note/"+e.uuid()+"/meta", []byte{}) e.Equal(http.StatusNotFound, metaResp.Code) } + +func (e *AppTestSuite) TestNoteV1_GetMetadata_readNote() { + // create note + createdResp := e.httpRequest( + http.MethodPost, + "/api/v1/note", + e.jsonify(apiv1NoteCreateRequest{Content: "content"}), //nolint:exhaustruct + ) + e.Equal(http.StatusCreated, createdResp.Code) + + var bodyCreated apiv1NoteCreateResponse + e.readBodyAndUnjsonify(createdResp.Body, &bodyCreated) + + // read note + readResp := e.httpRequest(http.MethodGet, "/api/v1/note/"+bodyCreated.Slug, nil) + e.Equal(http.StatusOK, readResp.Code) + + // get metadata + metaResp := e.httpRequest(http.MethodGet, "/api/v1/note/"+e.uuid()+"/meta", nil) + e.Equal(http.StatusNotFound, metaResp.Code) +}
M
internal/service/notesrv/notesrv.go
@@ -225,7 +225,7 @@ if err != nil {
return models.Note{}, err } - if !note.IsRead() { + if note.IsRead() { if err = n.cache.SetNote(ctx, inp.Slug, note); err != nil { slog.ErrorContext(ctx, "notecache", "err", err) }
M
internal/store/psql/noterepo/noterepo.go
@@ -22,7 +22,7 @@ // Returns [models.ErrNoteNotFound] if note is not found.
GetBySlug(ctx context.Context, slug dtos.NoteSlug) (models.Note, error) // GetMetadataBySlug gets note's metadata by its slug. - // Returns [models.ErrNoteNotFound] if note is not found. + // Returns [models.ErrNoteNotFound] if note is not found OR read. GetMetadataBySlug(ctx context.Context, slug dtos.NoteSlug) (dtos.NoteMetadata, error) // GetAllByAuthorID returns all notes with specified author.@@ -123,14 +123,19 @@ ctx context.Context,
slug dtos.NoteSlug, ) (dtos.NoteMetadata, error) { query := `--sql - select n.created_at, (n.password is not null and n.password <> '') has_password + select n.created_at, (n.password is not null and n.password <> '') has_password, n.read_at from notes n where slug = $1 ` + var readAt time.Time var metadata dtos.NoteMetadata - err := s.db.QueryRow(ctx, query, slug).Scan(&metadata.CreatedAt, &metadata.HasPassword) + err := s.db.QueryRow(ctx, query, slug).Scan(&metadata.CreatedAt, &metadata.HasPassword, &readAt) if errors.Is(err, pgx.ErrNoRows) { + return dtos.NoteMetadata{}, models.ErrNoteNotFound + } + + if !readAt.IsZero() { return dtos.NoteMetadata{}, models.ErrNoteNotFound }