chore: upgrade version 0.13.0 (#1685)

* chore: upgrade version `0.13.0`

* chore: update
This commit is contained in:
boojack 2023-05-20 10:16:19 +08:00 committed by GitHub
parent d80aa67c97
commit 1d7627dd72
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 81 additions and 62 deletions

View File

@ -1,12 +1,13 @@
name: Memos Build name: build-artifacts
on: on:
push: push:
branches: branches:
- main # Run on pushing branches like `release/1.0.0`
- "release/*.*.*"
jobs: jobs:
build: build-artifacts:
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
strategy: strategy:
matrix: matrix:

View File

@ -1,8 +1,6 @@
package api package api
type MemoOrganizer struct { type MemoOrganizer struct {
ID int
// Domain specific fields // Domain specific fields
MemoID int MemoID int
UserID int UserID int

View File

@ -102,15 +102,13 @@ func (s *Server) registerMemoRoutes(g *echo.Group) {
} }
} }
if s.Profile.IsDev() { for _, memoRelationUpsert := range memoCreate.RelationList {
for _, memoRelationUpsert := range memoCreate.RelationList { if _, err := s.Store.UpsertMemoRelation(ctx, &store.MemoRelationMessage{
if _, err := s.Store.UpsertMemoRelation(ctx, &store.MemoRelationMessage{ MemoID: memo.ID,
MemoID: memo.ID, RelatedMemoID: memoRelationUpsert.RelatedMemoID,
RelatedMemoID: memoRelationUpsert.RelatedMemoID, Type: store.MemoRelationType(memoRelationUpsert.Type),
Type: store.MemoRelationType(memoRelationUpsert.Type), }); err != nil {
}); err != nil { return echo.NewHTTPError(http.StatusInternalServerError, "Failed to upsert memo relation").SetInternal(err)
return echo.NewHTTPError(http.StatusInternalServerError, "Failed to upsert memo relation").SetInternal(err)
}
} }
} }
@ -187,34 +185,32 @@ func (s *Server) registerMemoRoutes(g *echo.Group) {
} }
} }
if s.Profile.IsDev() { patchMemoRelationList := make([]*api.MemoRelation, 0)
patchMemoRelationList := make([]*api.MemoRelation, 0) for _, memoRelationUpsert := range memoPatch.RelationList {
for _, memoRelationUpsert := range memoPatch.RelationList { patchMemoRelationList = append(patchMemoRelationList, &api.MemoRelation{
patchMemoRelationList = append(patchMemoRelationList, &api.MemoRelation{ MemoID: memo.ID,
MemoID: memo.ID, RelatedMemoID: memoRelationUpsert.RelatedMemoID,
RelatedMemoID: memoRelationUpsert.RelatedMemoID, Type: memoRelationUpsert.Type,
Type: memoRelationUpsert.Type, })
}) }
addedMemoRelationList, removedMemoRelationList := getMemoRelationListDiff(memo.RelationList, patchMemoRelationList)
for _, memoRelation := range addedMemoRelationList {
if _, err := s.Store.UpsertMemoRelation(ctx, &store.MemoRelationMessage{
MemoID: memo.ID,
RelatedMemoID: memoRelation.RelatedMemoID,
Type: store.MemoRelationType(memoRelation.Type),
}); err != nil {
return echo.NewHTTPError(http.StatusInternalServerError, "Failed to upsert memo relation").SetInternal(err)
} }
addedMemoRelationList, removedMemoRelationList := getMemoRelationListDiff(memo.RelationList, patchMemoRelationList) }
for _, memoRelation := range addedMemoRelationList { for _, memoRelation := range removedMemoRelationList {
if _, err := s.Store.UpsertMemoRelation(ctx, &store.MemoRelationMessage{ memoRelationType := store.MemoRelationType(memoRelation.Type)
MemoID: memo.ID, if err := s.Store.DeleteMemoRelation(ctx, &store.DeleteMemoRelationMessage{
RelatedMemoID: memoRelation.RelatedMemoID, MemoID: &memo.ID,
Type: store.MemoRelationType(memoRelation.Type), RelatedMemoID: &memoRelation.RelatedMemoID,
}); err != nil { Type: &memoRelationType,
return echo.NewHTTPError(http.StatusInternalServerError, "Failed to upsert memo relation").SetInternal(err) }); err != nil {
} return echo.NewHTTPError(http.StatusInternalServerError, "Failed to delete memo relation").SetInternal(err)
}
for _, memoRelation := range removedMemoRelationList {
memoRelationType := store.MemoRelationType(memoRelation.Type)
if err := s.Store.DeleteMemoRelation(ctx, &store.DeleteMemoRelationMessage{
MemoID: &memo.ID,
RelatedMemoID: &memoRelation.RelatedMemoID,
Type: &memoRelationType,
}); err != nil {
return echo.NewHTTPError(http.StatusInternalServerError, "Failed to delete memo relation").SetInternal(err)
}
} }
} }

View File

@ -9,10 +9,10 @@ import (
// Version is the service current released version. // Version is the service current released version.
// Semantic versioning: https://semver.org/ // Semantic versioning: https://semver.org/
var Version = "0.12.2" var Version = "0.13.0"
// DevVersion is the service current development version. // DevVersion is the service current development version.
var DevVersion = "0.12.2" var DevVersion = "0.13.0"
func GetCurrentVersion(mode string) string { func GetCurrentVersion(mode string) string {
if mode == "dev" || mode == "demo" { if mode == "dev" || mode == "demo" {

View File

@ -48,7 +48,6 @@ CREATE TABLE memo (
-- memo_organizer -- memo_organizer
CREATE TABLE memo_organizer ( CREATE TABLE memo_organizer (
id INTEGER PRIMARY KEY AUTOINCREMENT,
memo_id INTEGER NOT NULL, memo_id INTEGER NOT NULL,
user_id INTEGER NOT NULL, user_id INTEGER NOT NULL,
pinned INTEGER NOT NULL CHECK (pinned IN (0, 1)) DEFAULT 0, pinned INTEGER NOT NULL CHECK (pinned IN (0, 1)) DEFAULT 0,

View File

@ -0,0 +1,7 @@
-- memo_relation
CREATE TABLE memo_relation (
memo_id INTEGER NOT NULL,
related_memo_id INTEGER NOT NULL,
type TEXT NOT NULL,
UNIQUE(memo_id, related_memo_id, type)
);

View File

@ -0,0 +1,22 @@
DROP TABLE IF EXISTS memo_organizer_temp;
CREATE TABLE memo_organizer_temp (
memo_id INTEGER NOT NULL,
user_id INTEGER NOT NULL,
pinned INTEGER NOT NULL CHECK (pinned IN (0, 1)) DEFAULT 0,
UNIQUE(memo_id, user_id)
);
INSERT INTO
memo_organizer_temp (memo_id, user_id, pinned)
SELECT
memo_id,
user_id,
pinned
FROM
memo_organizer;
DROP TABLE memo_organizer;
ALTER TABLE
memo_organizer_temp RENAME TO memo_organizer;

View File

@ -48,7 +48,6 @@ CREATE TABLE memo (
-- memo_organizer -- memo_organizer
CREATE TABLE memo_organizer ( CREATE TABLE memo_organizer (
id INTEGER PRIMARY KEY AUTOINCREMENT,
memo_id INTEGER NOT NULL, memo_id INTEGER NOT NULL,
user_id INTEGER NOT NULL, user_id INTEGER NOT NULL,
pinned INTEGER NOT NULL CHECK (pinned IN (0, 1)) DEFAULT 0, pinned INTEGER NOT NULL CHECK (pinned IN (0, 1)) DEFAULT 0,
@ -123,4 +122,12 @@ CREATE TABLE idp (
type TEXT NOT NULL, type TEXT NOT NULL,
identifier_filter TEXT NOT NULL DEFAULT '', identifier_filter TEXT NOT NULL DEFAULT '',
config TEXT NOT NULL DEFAULT '{}' config TEXT NOT NULL DEFAULT '{}'
);
-- memo_relation
CREATE TABLE memo_relation (
memo_id INTEGER NOT NULL,
related_memo_id INTEGER NOT NULL,
type TEXT NOT NULL,
UNIQUE(memo_id, related_memo_id, type)
); );

View File

@ -55,10 +55,8 @@ func (s *Store) ComposeMemo(ctx context.Context, memo *api.Memo) (*api.Memo, err
if err := s.ComposeMemoResourceList(ctx, memo); err != nil { if err := s.ComposeMemoResourceList(ctx, memo); err != nil {
return nil, err return nil, err
} }
if s.Profile.IsDev() { if err := s.ComposeMemoRelationList(ctx, memo); err != nil {
if err := s.ComposeMemoRelationList(ctx, memo); err != nil { return nil, err
return nil, err
}
} }
return memo, nil return memo, nil

View File

@ -13,8 +13,6 @@ import (
// memoOrganizerRaw is the store model for an MemoOrganizer. // memoOrganizerRaw is the store model for an MemoOrganizer.
// Fields have exactly the same meanings as MemoOrganizer. // Fields have exactly the same meanings as MemoOrganizer.
type memoOrganizerRaw struct { type memoOrganizerRaw struct {
ID int
// Domain specific fields // Domain specific fields
MemoID int MemoID int
UserID int UserID int
@ -23,8 +21,6 @@ type memoOrganizerRaw struct {
func (raw *memoOrganizerRaw) toMemoOrganizer() *api.MemoOrganizer { func (raw *memoOrganizerRaw) toMemoOrganizer() *api.MemoOrganizer {
return &api.MemoOrganizer{ return &api.MemoOrganizer{
ID: raw.ID,
MemoID: raw.MemoID, MemoID: raw.MemoID,
UserID: raw.UserID, UserID: raw.UserID,
Pinned: raw.Pinned, Pinned: raw.Pinned,
@ -87,7 +83,6 @@ func (s *Store) DeleteMemoOrganizer(ctx context.Context, delete *api.MemoOrganiz
func findMemoOrganizer(ctx context.Context, tx *sql.Tx, find *api.MemoOrganizerFind) (*memoOrganizerRaw, error) { func findMemoOrganizer(ctx context.Context, tx *sql.Tx, find *api.MemoOrganizerFind) (*memoOrganizerRaw, error) {
query := ` query := `
SELECT SELECT
id,
memo_id, memo_id,
user_id, user_id,
pinned pinned
@ -106,7 +101,6 @@ func findMemoOrganizer(ctx context.Context, tx *sql.Tx, find *api.MemoOrganizerF
var memoOrganizerRaw memoOrganizerRaw var memoOrganizerRaw memoOrganizerRaw
if err := row.Scan( if err := row.Scan(
&memoOrganizerRaw.ID,
&memoOrganizerRaw.MemoID, &memoOrganizerRaw.MemoID,
&memoOrganizerRaw.UserID, &memoOrganizerRaw.UserID,
&memoOrganizerRaw.Pinned, &memoOrganizerRaw.Pinned,
@ -132,11 +126,10 @@ func upsertMemoOrganizer(ctx context.Context, tx *sql.Tx, upsert *api.MemoOrgani
ON CONFLICT(memo_id, user_id) DO UPDATE ON CONFLICT(memo_id, user_id) DO UPDATE
SET SET
pinned = EXCLUDED.pinned pinned = EXCLUDED.pinned
RETURNING id, memo_id, user_id, pinned RETURNING memo_id, user_id, pinned
` `
var memoOrganizer api.MemoOrganizer var memoOrganizer api.MemoOrganizer
if err := tx.QueryRowContext(ctx, query, upsert.MemoID, upsert.UserID, upsert.Pinned).Scan( if err := tx.QueryRowContext(ctx, query, upsert.MemoID, upsert.UserID, upsert.Pinned).Scan(
&memoOrganizer.ID,
&memoOrganizer.MemoID, &memoOrganizer.MemoID,
&memoOrganizer.UserID, &memoOrganizer.UserID,
&memoOrganizer.Pinned, &memoOrganizer.Pinned,

View File

@ -51,7 +51,7 @@ func (s *Store) Vacuum(ctx context.Context) error {
return nil return nil
} }
func (s *Store) vacuumImpl(ctx context.Context, tx *sql.Tx) error { func (*Store) vacuumImpl(ctx context.Context, tx *sql.Tx) error {
if err := vacuumMemo(ctx, tx); err != nil { if err := vacuumMemo(ctx, tx); err != nil {
return err return err
} }
@ -70,10 +70,8 @@ func (s *Store) vacuumImpl(ctx context.Context, tx *sql.Tx) error {
if err := vacuumMemoResource(ctx, tx); err != nil { if err := vacuumMemoResource(ctx, tx); err != nil {
return err return err
} }
if s.Profile.IsDev() { if err := vacuumMemoRelations(ctx, tx); err != nil {
if err := vacuumMemoRelations(ctx, tx); err != nil { return err
return err
}
} }
if err := vacuumTag(ctx, tx); err != nil { if err := vacuumTag(ctx, tx); err != nil {
// Prevent revive warning. // Prevent revive warning.