From 005beee08ee1b2ed3aeb2f21c9e9dd7bfdcae36c Mon Sep 17 00:00:00 2001 From: Rogee Date: Fri, 10 Jan 2025 17:50:54 +0800 Subject: [PATCH] feat: add storage and media table --- backend/database/fields/storage.go | 5 + .../20250110093539_create_storages.sql | 19 ++++ .../20250110093636_create_medias.sql | 23 ++++ .../models/qvyun_v2/public/model/medias.go | 26 +++++ .../models/qvyun_v2/public/model/storages.go | 22 ++++ .../models/qvyun_v2/public/table/medias.go | 105 ++++++++++++++++++ .../models/qvyun_v2/public/table/storages.go | 93 ++++++++++++++++ .../qvyun_v2/public/table/table_use_schema.go | 2 + 8 files changed, 295 insertions(+) create mode 100644 backend/database/fields/storage.go create mode 100644 backend/database/migrations/20250110093539_create_storages.sql create mode 100644 backend/database/migrations/20250110093636_create_medias.sql create mode 100644 backend/database/models/qvyun_v2/public/model/medias.go create mode 100644 backend/database/models/qvyun_v2/public/model/storages.go create mode 100644 backend/database/models/qvyun_v2/public/table/medias.go create mode 100644 backend/database/models/qvyun_v2/public/table/storages.go diff --git a/backend/database/fields/storage.go b/backend/database/fields/storage.go new file mode 100644 index 0000000..c33946c --- /dev/null +++ b/backend/database/fields/storage.go @@ -0,0 +1,5 @@ +package fields + +// swagger:enum UserStatus +// ENUM( Local ,AliOSS, S3, MinIO) +type StorageType int16 diff --git a/backend/database/migrations/20250110093539_create_storages.sql b/backend/database/migrations/20250110093539_create_storages.sql new file mode 100644 index 0000000..4ae5aa5 --- /dev/null +++ b/backend/database/migrations/20250110093539_create_storages.sql @@ -0,0 +1,19 @@ +-- +goose Up +-- +goose StatementBegin +-- create storages table +CREATE TABLE storages ( + id SERIAL8 PRIMARY KEY, + created_at timestamp NOT NULL default now(), + updated_at timestamp NOT NULL default now(), + + is_default BOOLEAN NOT NULL default false, + name VARCHAR(128) NOT NULL default '', + type INT2 NOT NULL default 0, + config JSONB NOT NULL default '{}' +); +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DROP TABLE storages; +-- +goose StatementEnd diff --git a/backend/database/migrations/20250110093636_create_medias.sql b/backend/database/migrations/20250110093636_create_medias.sql new file mode 100644 index 0000000..2db7123 --- /dev/null +++ b/backend/database/migrations/20250110093636_create_medias.sql @@ -0,0 +1,23 @@ +-- +goose Up +-- +goose StatementBegin +-- create medias table +CREATE TABLE medias ( + id SERIAL8 PRIMARY KEY, + created_at timestamp NOT NULL default now(), + updated_at timestamp NOT NULL default now(), + + user_id INT8 NOT NULL, + post_id INT8 NOT NULL, + storage_id INT8 NOT NULL, + name VARCHAR(255) NOT NULL default '', + uuid VARCHAR(128) NOT NULL, + mime_type VARCHAR(128) NOT NULL default '', + size INT8 NOT NULL default 0, + path VARCHAR(255) NOT NULL default '' +); +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DROP TABLE medias; +-- +goose StatementEnd diff --git a/backend/database/models/qvyun_v2/public/model/medias.go b/backend/database/models/qvyun_v2/public/model/medias.go new file mode 100644 index 0000000..058dd98 --- /dev/null +++ b/backend/database/models/qvyun_v2/public/model/medias.go @@ -0,0 +1,26 @@ +// +// Code generated by go-jet DO NOT EDIT. +// +// WARNING: Changes to this file may cause incorrect behavior +// and will be lost if the code is regenerated +// + +package model + +import ( + "time" +) + +type Medias struct { + ID int64 `sql:"primary_key" json:"id"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` + UserID int64 `json:"user_id"` + PostID int64 `json:"post_id"` + StorageID int64 `json:"storage_id"` + Name string `json:"name"` + UUID string `json:"uuid"` + MimeType string `json:"mime_type"` + Size int64 `json:"size"` + Path string `json:"path"` +} diff --git a/backend/database/models/qvyun_v2/public/model/storages.go b/backend/database/models/qvyun_v2/public/model/storages.go new file mode 100644 index 0000000..e832d45 --- /dev/null +++ b/backend/database/models/qvyun_v2/public/model/storages.go @@ -0,0 +1,22 @@ +// +// Code generated by go-jet DO NOT EDIT. +// +// WARNING: Changes to this file may cause incorrect behavior +// and will be lost if the code is regenerated +// + +package model + +import ( + "time" +) + +type Storages struct { + ID int64 `sql:"primary_key" json:"id"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` + IsDefault bool `json:"is_default"` + Name string `json:"name"` + Type int16 `json:"type"` + Config string `json:"config"` +} diff --git a/backend/database/models/qvyun_v2/public/table/medias.go b/backend/database/models/qvyun_v2/public/table/medias.go new file mode 100644 index 0000000..e5c69e3 --- /dev/null +++ b/backend/database/models/qvyun_v2/public/table/medias.go @@ -0,0 +1,105 @@ +// +// Code generated by go-jet DO NOT EDIT. +// +// WARNING: Changes to this file may cause incorrect behavior +// and will be lost if the code is regenerated +// + +package table + +import ( + "github.com/go-jet/jet/v2/postgres" +) + +var Medias = newMediasTable("public", "medias", "") + +type mediasTable struct { + postgres.Table + + // Columns + ID postgres.ColumnInteger + CreatedAt postgres.ColumnTimestamp + UpdatedAt postgres.ColumnTimestamp + UserID postgres.ColumnInteger + PostID postgres.ColumnInteger + StorageID postgres.ColumnInteger + Name postgres.ColumnString + UUID postgres.ColumnString + MimeType postgres.ColumnString + Size postgres.ColumnInteger + Path postgres.ColumnString + + AllColumns postgres.ColumnList + MutableColumns postgres.ColumnList +} + +type MediasTable struct { + mediasTable + + EXCLUDED mediasTable +} + +// AS creates new MediasTable with assigned alias +func (a MediasTable) AS(alias string) *MediasTable { + return newMediasTable(a.SchemaName(), a.TableName(), alias) +} + +// Schema creates new MediasTable with assigned schema name +func (a MediasTable) FromSchema(schemaName string) *MediasTable { + return newMediasTable(schemaName, a.TableName(), a.Alias()) +} + +// WithPrefix creates new MediasTable with assigned table prefix +func (a MediasTable) WithPrefix(prefix string) *MediasTable { + return newMediasTable(a.SchemaName(), prefix+a.TableName(), a.TableName()) +} + +// WithSuffix creates new MediasTable with assigned table suffix +func (a MediasTable) WithSuffix(suffix string) *MediasTable { + return newMediasTable(a.SchemaName(), a.TableName()+suffix, a.TableName()) +} + +func newMediasTable(schemaName, tableName, alias string) *MediasTable { + return &MediasTable{ + mediasTable: newMediasTableImpl(schemaName, tableName, alias), + EXCLUDED: newMediasTableImpl("", "excluded", ""), + } +} + +func newMediasTableImpl(schemaName, tableName, alias string) mediasTable { + var ( + IDColumn = postgres.IntegerColumn("id") + CreatedAtColumn = postgres.TimestampColumn("created_at") + UpdatedAtColumn = postgres.TimestampColumn("updated_at") + UserIDColumn = postgres.IntegerColumn("user_id") + PostIDColumn = postgres.IntegerColumn("post_id") + StorageIDColumn = postgres.IntegerColumn("storage_id") + NameColumn = postgres.StringColumn("name") + UUIDColumn = postgres.StringColumn("uuid") + MimeTypeColumn = postgres.StringColumn("mime_type") + SizeColumn = postgres.IntegerColumn("size") + PathColumn = postgres.StringColumn("path") + allColumns = postgres.ColumnList{IDColumn, CreatedAtColumn, UpdatedAtColumn, UserIDColumn, PostIDColumn, StorageIDColumn, NameColumn, UUIDColumn, MimeTypeColumn, SizeColumn, PathColumn} + mutableColumns = postgres.ColumnList{CreatedAtColumn, UpdatedAtColumn, UserIDColumn, PostIDColumn, StorageIDColumn, NameColumn, UUIDColumn, MimeTypeColumn, SizeColumn, PathColumn} + ) + + return mediasTable{ + Table: postgres.NewTable(schemaName, tableName, alias, allColumns...), + + //Columns + ID: IDColumn, + CreatedAt: CreatedAtColumn, + UpdatedAt: UpdatedAtColumn, + UserID: UserIDColumn, + PostID: PostIDColumn, + StorageID: StorageIDColumn, + Name: NameColumn, + UUID: UUIDColumn, + MimeType: MimeTypeColumn, + Size: SizeColumn, + Path: PathColumn, + + AllColumns: allColumns, + MutableColumns: mutableColumns, + } +} diff --git a/backend/database/models/qvyun_v2/public/table/storages.go b/backend/database/models/qvyun_v2/public/table/storages.go new file mode 100644 index 0000000..69ba6ef --- /dev/null +++ b/backend/database/models/qvyun_v2/public/table/storages.go @@ -0,0 +1,93 @@ +// +// Code generated by go-jet DO NOT EDIT. +// +// WARNING: Changes to this file may cause incorrect behavior +// and will be lost if the code is regenerated +// + +package table + +import ( + "github.com/go-jet/jet/v2/postgres" +) + +var Storages = newStoragesTable("public", "storages", "") + +type storagesTable struct { + postgres.Table + + // Columns + ID postgres.ColumnInteger + CreatedAt postgres.ColumnTimestamp + UpdatedAt postgres.ColumnTimestamp + IsDefault postgres.ColumnBool + Name postgres.ColumnString + Type postgres.ColumnInteger + Config postgres.ColumnString + + AllColumns postgres.ColumnList + MutableColumns postgres.ColumnList +} + +type StoragesTable struct { + storagesTable + + EXCLUDED storagesTable +} + +// AS creates new StoragesTable with assigned alias +func (a StoragesTable) AS(alias string) *StoragesTable { + return newStoragesTable(a.SchemaName(), a.TableName(), alias) +} + +// Schema creates new StoragesTable with assigned schema name +func (a StoragesTable) FromSchema(schemaName string) *StoragesTable { + return newStoragesTable(schemaName, a.TableName(), a.Alias()) +} + +// WithPrefix creates new StoragesTable with assigned table prefix +func (a StoragesTable) WithPrefix(prefix string) *StoragesTable { + return newStoragesTable(a.SchemaName(), prefix+a.TableName(), a.TableName()) +} + +// WithSuffix creates new StoragesTable with assigned table suffix +func (a StoragesTable) WithSuffix(suffix string) *StoragesTable { + return newStoragesTable(a.SchemaName(), a.TableName()+suffix, a.TableName()) +} + +func newStoragesTable(schemaName, tableName, alias string) *StoragesTable { + return &StoragesTable{ + storagesTable: newStoragesTableImpl(schemaName, tableName, alias), + EXCLUDED: newStoragesTableImpl("", "excluded", ""), + } +} + +func newStoragesTableImpl(schemaName, tableName, alias string) storagesTable { + var ( + IDColumn = postgres.IntegerColumn("id") + CreatedAtColumn = postgres.TimestampColumn("created_at") + UpdatedAtColumn = postgres.TimestampColumn("updated_at") + IsDefaultColumn = postgres.BoolColumn("is_default") + NameColumn = postgres.StringColumn("name") + TypeColumn = postgres.IntegerColumn("type") + ConfigColumn = postgres.StringColumn("config") + allColumns = postgres.ColumnList{IDColumn, CreatedAtColumn, UpdatedAtColumn, IsDefaultColumn, NameColumn, TypeColumn, ConfigColumn} + mutableColumns = postgres.ColumnList{CreatedAtColumn, UpdatedAtColumn, IsDefaultColumn, NameColumn, TypeColumn, ConfigColumn} + ) + + return storagesTable{ + Table: postgres.NewTable(schemaName, tableName, alias, allColumns...), + + //Columns + ID: IDColumn, + CreatedAt: CreatedAtColumn, + UpdatedAt: UpdatedAtColumn, + IsDefault: IsDefaultColumn, + Name: NameColumn, + Type: TypeColumn, + Config: ConfigColumn, + + AllColumns: allColumns, + MutableColumns: mutableColumns, + } +} diff --git a/backend/database/models/qvyun_v2/public/table/table_use_schema.go b/backend/database/models/qvyun_v2/public/table/table_use_schema.go index 82be2c5..7905e99 100644 --- a/backend/database/models/qvyun_v2/public/table/table_use_schema.go +++ b/backend/database/models/qvyun_v2/public/table/table_use_schema.go @@ -10,6 +10,7 @@ package table // UseSchema sets a new schema name for all generated table SQL builder types. It is recommended to invoke // this method only once at the beginning of the program. func UseSchema(schema string) { + Medias = Medias.FromSchema(schema) Migrations = Migrations.FromSchema(schema) Orders = Orders.FromSchema(schema) Posts = Posts.FromSchema(schema) @@ -18,6 +19,7 @@ func UseSchema(schema string) { RiverJob = RiverJob.FromSchema(schema) RiverLeader = RiverLeader.FromSchema(schema) RiverQueue = RiverQueue.FromSchema(schema) + Storages = Storages.FromSchema(schema) TenantUserBalances = TenantUserBalances.FromSchema(schema) TenantUsers = TenantUsers.FromSchema(schema) Tenants = Tenants.FromSchema(schema)