mirror of
https://github.com/usememos/memos.git
synced 2025-04-14 01:22:04 +02:00
chore: upgrade version 0.13.0
(#1685)
* chore: upgrade version `0.13.0` * chore: update
This commit is contained in:
parent
d80aa67c97
commit
1d7627dd72
7
.github/workflows/build-artifacts.yml
vendored
7
.github/workflows/build-artifacts.yml
vendored
@ -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:
|
||||||
|
@ -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
|
||||||
|
@ -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)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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" {
|
||||||
|
@ -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,
|
||||||
|
7
store/db/migration/prod/0.13/00__memo_relation.sql
Normal file
7
store/db/migration/prod/0.13/00__memo_relation.sql
Normal 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)
|
||||||
|
);
|
@ -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;
|
@ -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)
|
||||||
);
|
);
|
@ -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
|
||||||
|
@ -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,
|
||||||
|
@ -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.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user