From 41f3cedc8d9eeb8e317f92f90f4efa0c1226a3df Mon Sep 17 00:00:00 2001 From: Michael Li Date: Thu, 5 Jan 2023 17:20:16 +0800 Subject: [PATCH] sqlc: add all stub interface implement for core.DataService in sqlc feature --- Makefile | 2 +- README.md | 1 + features-status.md | 13 +- internal/conf/db_pgx.go | 29 +++ internal/dao/slonik/authority.go | 58 +++++ internal/dao/slonik/ce/ce.go | 4 + internal/dao/slonik/ce/mysql/city.sql.go | 88 ------- internal/dao/slonik/ce/mysql/db.go | 178 ------------- internal/dao/slonik/ce/mysql/models.go | 75 ------ internal/dao/slonik/ce/mysql/querier.go | 25 -- internal/dao/slonik/ce/mysql/query/city.sql | 23 -- internal/dao/slonik/ce/mysql/query/venue.sql | 48 ---- .../dao/slonik/ce/mysql/schema/0001_city.sql | 4 - .../dao/slonik/ce/mysql/schema/0002_venue.sql | 12 - .../ce/mysql/schema/0003_add_column.sql | 3 - internal/dao/slonik/ce/mysql/venue.sql.go | 193 -------------- internal/dao/slonik/ce/sqlc.yaml | 18 -- internal/dao/slonik/ce/sqlite/city.sql.go | 88 ------- internal/dao/slonik/ce/sqlite/db.go | 178 ------------- internal/dao/slonik/ce/sqlite/models.go | 28 -- internal/dao/slonik/ce/sqlite/querier.go | 25 -- internal/dao/slonik/ce/sqlite/query/city.sql | 23 -- internal/dao/slonik/ce/sqlite/query/venue.sql | 48 ---- .../dao/slonik/ce/sqlite/schema/0001_city.sql | 4 - .../slonik/ce/sqlite/schema/0002_venue.sql | 13 - .../ce/sqlite/schema/0003_add_column.sql | 3 - internal/dao/slonik/ce/sqlite/venue.sql.go | 193 -------------- internal/dao/slonik/comments.go | 107 ++++++++ internal/dao/slonik/contacts.go | 64 +++++ internal/dao/slonik/index.go | 55 ++++ internal/dao/slonik/messages.go | 64 +++++ internal/dao/slonik/pgx.go | 24 ++ internal/dao/slonik/security.go | 49 ++++ internal/dao/slonik/slonik.go | 79 +++++- internal/dao/slonik/topics.go | 52 ++++ internal/dao/slonik/tweets.go | 243 ++++++++++++++++++ internal/dao/slonik/user.go | 76 ++++++ internal/dao/slonik/wallet.go | 63 +++++ 38 files changed, 970 insertions(+), 1283 deletions(-) create mode 100644 internal/conf/db_pgx.go create mode 100644 internal/dao/slonik/authority.go delete mode 100644 internal/dao/slonik/ce/mysql/city.sql.go delete mode 100644 internal/dao/slonik/ce/mysql/db.go delete mode 100644 internal/dao/slonik/ce/mysql/models.go delete mode 100644 internal/dao/slonik/ce/mysql/querier.go delete mode 100644 internal/dao/slonik/ce/mysql/query/city.sql delete mode 100644 internal/dao/slonik/ce/mysql/query/venue.sql delete mode 100644 internal/dao/slonik/ce/mysql/schema/0001_city.sql delete mode 100644 internal/dao/slonik/ce/mysql/schema/0002_venue.sql delete mode 100644 internal/dao/slonik/ce/mysql/schema/0003_add_column.sql delete mode 100644 internal/dao/slonik/ce/mysql/venue.sql.go delete mode 100644 internal/dao/slonik/ce/sqlite/city.sql.go delete mode 100644 internal/dao/slonik/ce/sqlite/db.go delete mode 100644 internal/dao/slonik/ce/sqlite/models.go delete mode 100644 internal/dao/slonik/ce/sqlite/querier.go delete mode 100644 internal/dao/slonik/ce/sqlite/query/city.sql delete mode 100644 internal/dao/slonik/ce/sqlite/query/venue.sql delete mode 100644 internal/dao/slonik/ce/sqlite/schema/0001_city.sql delete mode 100644 internal/dao/slonik/ce/sqlite/schema/0002_venue.sql delete mode 100644 internal/dao/slonik/ce/sqlite/schema/0003_add_column.sql delete mode 100644 internal/dao/slonik/ce/sqlite/venue.sql.go create mode 100644 internal/dao/slonik/comments.go create mode 100644 internal/dao/slonik/contacts.go create mode 100644 internal/dao/slonik/index.go create mode 100644 internal/dao/slonik/messages.go create mode 100644 internal/dao/slonik/pgx.go create mode 100644 internal/dao/slonik/security.go create mode 100644 internal/dao/slonik/topics.go create mode 100644 internal/dao/slonik/tweets.go create mode 100644 internal/dao/slonik/user.go create mode 100644 internal/dao/slonik/wallet.go diff --git a/Makefile b/Makefile index 4f02957d..1808306c 100644 --- a/Makefile +++ b/Makefile @@ -84,7 +84,7 @@ gen-grpc: .PHONY: gen-sqlc gen-sqlc: - @find internal/dao/slonik/ce/mysql internal/dao/slonik/ce/postgres internal/dao/slonik/ce/sqlite -name '*.go' -exec rm -f {} + + @find internal/dao/slonik/ce/postgres -name '*.go' -exec rm -f {} + @go generate internal/dao/slonik/ce/ce.go @go fmt ./internal/dao/slonik/ce/... diff --git a/README.md b/README.md index d86d454d..ac2f88c0 100644 --- a/README.md +++ b/README.md @@ -333,6 +333,7 @@ release/paopao-ce --no-default-features --features sqlite3,localoss,loggerfile,r |`Deprecated:Web` | 子服务 | 稳定 | 开启旧的Web服务| |`Gorm` | 数据库 | 稳定(默认) | 使用[gorm](https://github.com/go-gorm/gorm)作为数据库的ORM,默认使用 `Gorm` + `MySQL`组合| |`Sqlx`| 数据库 | WIP | 使用[sqlx](https://github.com/jmoiron/sqlx)作为数据库的ORM| +|`Sqlc`| 数据库 | WIP | 使用[sqlc](https://github.com/kyleconroy/sqlc)自动生成ORM代码| |`MySQL`| 数据库 | 稳定(默认) | 使用MySQL作为数据库| |`Postgres`| 数据库 | 稳定 | 使用PostgreSQL作为数据库| |`Sqlite3`| 数据库 | 稳定 | 使用Sqlite3作为数据库| diff --git a/features-status.md b/features-status.md index 8937a2bc..a24f2286 100644 --- a/features-status.md +++ b/features-status.md @@ -47,13 +47,18 @@ * [x] 服务初始化逻辑 #### 数据库: -* `Gorm` + `MySQL`/`Sqlite3`/`PostgreSQL` -使用[gorm](https://github.com/go-gorm/gorm)作为数据库的ORM,默认使用 `Grom` + `MySQL`组合(目前状态:稳定,默认,推荐使用); +* `Gorm` + `MySQL`/`Sqlite3`/`PostgreSQL` +使用[gorm](https://github.com/go-gorm/gorm)作为数据库的ORM,默认使用 `Grom` + `MySQL`组合(目前状态:稳定,默认,推荐使用) * [ ] 提按文档 * [x] 接口定义 * [x] 业务逻辑实现 -* `Sqlx` + `MySQL`/`PostgreSQL` -使用[sqlx](https://github.com/jmoiron/sqlx)作为数据库的ORM(目前状态:WIP); +* `Sqlx` + `MySQL`/`Sqlite3`/`PostgreSQL` +使用[sqlx](https://github.com/jmoiron/sqlx)作为数据库的ORM(目前状态:WIP) + * [ ] 提按文档 + * [ ] 接口定义 + * [ ] 业务逻辑实现 +* `Sqlc` + `PostgreSQL` +使用[sqlc](https://github.com/kyleconroy/sqlc)自动生成ORM代码(目前状态:WIP) * [ ] 提按文档 * [ ] 接口定义 * [ ] 业务逻辑实现 diff --git a/internal/conf/db_pgx.go b/internal/conf/db_pgx.go new file mode 100644 index 00000000..23e5984d --- /dev/null +++ b/internal/conf/db_pgx.go @@ -0,0 +1,29 @@ +// Copyright 2023 ROC. All rights reserved. +// Use of this source code is governed by a MIT style +// license that can be found in the LICENSE file. + +package conf + +import ( + "context" + "sync" + + "github.com/jackc/pgx/v5" + "github.com/sirupsen/logrus" +) + +var ( + _pgxDB *pgx.Conn + _oncePgx sync.Once +) + +func MustPgxDB() *pgx.Conn { + _oncePgx.Do(func() { + conn, err := pgx.Connect(context.Background(), PostgresSetting.Dsn()) + if err != nil { + logrus.Fatalf("pgx.Connect occurs error: %s", err) + } + _pgxDB = conn + }) + return _pgxDB +} diff --git a/internal/dao/slonik/authority.go b/internal/dao/slonik/authority.go new file mode 100644 index 00000000..b407f7a9 --- /dev/null +++ b/internal/dao/slonik/authority.go @@ -0,0 +1,58 @@ +// Copyright 2023 ROC. All rights reserved. +// Use of this source code is governed by a MIT style +// license that can be found in the LICENSE file. + +package slonik + +import ( + "github.com/jackc/pgx/v5" + "github.com/rocboss/paopao-ce/internal/core" + dbr "github.com/rocboss/paopao-ce/internal/dao/slonik/ce/postgres" + "github.com/rocboss/paopao-ce/pkg/debug" +) + +var ( + _ core.AuthorizationManageService = (*authorizationManageServant)(nil) +) + +type authorizationManageServant struct { + db *pgx.Conn + q dbr.Querier +} + +func (s *authorizationManageServant) IsAllow(user *core.User, action *core.Action) bool { + // TODO + debug.NotImplemented() + return false +} + +func (s *authorizationManageServant) MyFriendSet(userId int64) core.FriendSet { + // TODO + debug.NotImplemented() + return nil +} + +func (s *authorizationManageServant) BeFriendFilter(userId int64) core.FriendFilter { + // TODO + debug.NotImplemented() + return nil +} + +func (s *authorizationManageServant) BeFriendIds(userId int64) ([]int64, error) { + // TODO + debug.NotImplemented() + return nil, nil +} + +func (s *authorizationManageServant) isFriend(userId int64, friendId int64) bool { + // TODO + debug.NotImplemented() + return false +} + +func newAuthorizationManageService(db *pgx.Conn) core.AuthorizationManageService { + return &authorizationManageServant{ + db: db, + q: dbr.New(db), + } +} diff --git a/internal/dao/slonik/ce/ce.go b/internal/dao/slonik/ce/ce.go index 6e3cb6ca..8e6b4e71 100644 --- a/internal/dao/slonik/ce/ce.go +++ b/internal/dao/slonik/ce/ce.go @@ -1,3 +1,7 @@ +// Copyright 2023 ROC. All rights reserved. +// Use of this source code is governed by a MIT style +// license that can be found in the LICENSE file. + package ce //go:generate sqlc generate -x diff --git a/internal/dao/slonik/ce/mysql/city.sql.go b/internal/dao/slonik/ce/mysql/city.sql.go deleted file mode 100644 index 75ea6e41..00000000 --- a/internal/dao/slonik/ce/mysql/city.sql.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by sqlc. DO NOT EDIT. -// versions: -// sqlc v1.16.0 -// source: city.sql - -package dbr - -import ( - "context" -) - -const createCity = `-- name: CreateCity :exec -INSERT INTO city ( - name, - slug -) VALUES ( - ?, - ? -) -` - -type CreateCityParams struct { - Name string - Slug string -} - -func (q *Queries) CreateCity(ctx context.Context, arg CreateCityParams) error { - _, err := q.exec(ctx, q.createCityStmt, createCity, arg.Name, arg.Slug) - return err -} - -const getCity = `-- name: GetCity :one -SELECT slug, name -FROM city -WHERE slug = ? -` - -func (q *Queries) GetCity(ctx context.Context, slug string) (City, error) { - row := q.queryRow(ctx, q.getCityStmt, getCity, slug) - var i City - err := row.Scan(&i.Slug, &i.Name) - return i, err -} - -const listCities = `-- name: ListCities :many -SELECT slug, name -FROM city -ORDER BY name -` - -func (q *Queries) ListCities(ctx context.Context) ([]City, error) { - rows, err := q.query(ctx, q.listCitiesStmt, listCities) - if err != nil { - return nil, err - } - defer rows.Close() - var items []City - for rows.Next() { - var i City - if err := rows.Scan(&i.Slug, &i.Name); err != nil { - return nil, err - } - items = append(items, i) - } - if err := rows.Close(); err != nil { - return nil, err - } - if err := rows.Err(); err != nil { - return nil, err - } - return items, nil -} - -const updateCityName = `-- name: UpdateCityName :exec -UPDATE city -SET name = ? -WHERE slug = ? -` - -type UpdateCityNameParams struct { - Name string - Slug string -} - -func (q *Queries) UpdateCityName(ctx context.Context, arg UpdateCityNameParams) error { - _, err := q.exec(ctx, q.updateCityNameStmt, updateCityName, arg.Name, arg.Slug) - return err -} diff --git a/internal/dao/slonik/ce/mysql/db.go b/internal/dao/slonik/ce/mysql/db.go deleted file mode 100644 index 451eb52b..00000000 --- a/internal/dao/slonik/ce/mysql/db.go +++ /dev/null @@ -1,178 +0,0 @@ -// Code generated by sqlc. DO NOT EDIT. -// versions: -// sqlc v1.16.0 - -package dbr - -import ( - "context" - "database/sql" - "fmt" -) - -type DBTX interface { - ExecContext(context.Context, string, ...interface{}) (sql.Result, error) - PrepareContext(context.Context, string) (*sql.Stmt, error) - QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) - QueryRowContext(context.Context, string, ...interface{}) *sql.Row -} - -func New(db DBTX) *Queries { - return &Queries{db: db} -} - -func Prepare(ctx context.Context, db DBTX) (*Queries, error) { - q := Queries{db: db} - var err error - if q.createCityStmt, err = db.PrepareContext(ctx, createCity); err != nil { - return nil, fmt.Errorf("error preparing query CreateCity: %w", err) - } - if q.createVenueStmt, err = db.PrepareContext(ctx, createVenue); err != nil { - return nil, fmt.Errorf("error preparing query CreateVenue: %w", err) - } - if q.deleteVenueStmt, err = db.PrepareContext(ctx, deleteVenue); err != nil { - return nil, fmt.Errorf("error preparing query DeleteVenue: %w", err) - } - if q.getCityStmt, err = db.PrepareContext(ctx, getCity); err != nil { - return nil, fmt.Errorf("error preparing query GetCity: %w", err) - } - if q.getVenueStmt, err = db.PrepareContext(ctx, getVenue); err != nil { - return nil, fmt.Errorf("error preparing query GetVenue: %w", err) - } - if q.listCitiesStmt, err = db.PrepareContext(ctx, listCities); err != nil { - return nil, fmt.Errorf("error preparing query ListCities: %w", err) - } - if q.listVenuesStmt, err = db.PrepareContext(ctx, listVenues); err != nil { - return nil, fmt.Errorf("error preparing query ListVenues: %w", err) - } - if q.updateCityNameStmt, err = db.PrepareContext(ctx, updateCityName); err != nil { - return nil, fmt.Errorf("error preparing query UpdateCityName: %w", err) - } - if q.updateVenueNameStmt, err = db.PrepareContext(ctx, updateVenueName); err != nil { - return nil, fmt.Errorf("error preparing query UpdateVenueName: %w", err) - } - if q.venueCountByCityStmt, err = db.PrepareContext(ctx, venueCountByCity); err != nil { - return nil, fmt.Errorf("error preparing query VenueCountByCity: %w", err) - } - return &q, nil -} - -func (q *Queries) Close() error { - var err error - if q.createCityStmt != nil { - if cerr := q.createCityStmt.Close(); cerr != nil { - err = fmt.Errorf("error closing createCityStmt: %w", cerr) - } - } - if q.createVenueStmt != nil { - if cerr := q.createVenueStmt.Close(); cerr != nil { - err = fmt.Errorf("error closing createVenueStmt: %w", cerr) - } - } - if q.deleteVenueStmt != nil { - if cerr := q.deleteVenueStmt.Close(); cerr != nil { - err = fmt.Errorf("error closing deleteVenueStmt: %w", cerr) - } - } - if q.getCityStmt != nil { - if cerr := q.getCityStmt.Close(); cerr != nil { - err = fmt.Errorf("error closing getCityStmt: %w", cerr) - } - } - if q.getVenueStmt != nil { - if cerr := q.getVenueStmt.Close(); cerr != nil { - err = fmt.Errorf("error closing getVenueStmt: %w", cerr) - } - } - if q.listCitiesStmt != nil { - if cerr := q.listCitiesStmt.Close(); cerr != nil { - err = fmt.Errorf("error closing listCitiesStmt: %w", cerr) - } - } - if q.listVenuesStmt != nil { - if cerr := q.listVenuesStmt.Close(); cerr != nil { - err = fmt.Errorf("error closing listVenuesStmt: %w", cerr) - } - } - if q.updateCityNameStmt != nil { - if cerr := q.updateCityNameStmt.Close(); cerr != nil { - err = fmt.Errorf("error closing updateCityNameStmt: %w", cerr) - } - } - if q.updateVenueNameStmt != nil { - if cerr := q.updateVenueNameStmt.Close(); cerr != nil { - err = fmt.Errorf("error closing updateVenueNameStmt: %w", cerr) - } - } - if q.venueCountByCityStmt != nil { - if cerr := q.venueCountByCityStmt.Close(); cerr != nil { - err = fmt.Errorf("error closing venueCountByCityStmt: %w", cerr) - } - } - return err -} - -func (q *Queries) exec(ctx context.Context, stmt *sql.Stmt, query string, args ...interface{}) (sql.Result, error) { - switch { - case stmt != nil && q.tx != nil: - return q.tx.StmtContext(ctx, stmt).ExecContext(ctx, args...) - case stmt != nil: - return stmt.ExecContext(ctx, args...) - default: - return q.db.ExecContext(ctx, query, args...) - } -} - -func (q *Queries) query(ctx context.Context, stmt *sql.Stmt, query string, args ...interface{}) (*sql.Rows, error) { - switch { - case stmt != nil && q.tx != nil: - return q.tx.StmtContext(ctx, stmt).QueryContext(ctx, args...) - case stmt != nil: - return stmt.QueryContext(ctx, args...) - default: - return q.db.QueryContext(ctx, query, args...) - } -} - -func (q *Queries) queryRow(ctx context.Context, stmt *sql.Stmt, query string, args ...interface{}) *sql.Row { - switch { - case stmt != nil && q.tx != nil: - return q.tx.StmtContext(ctx, stmt).QueryRowContext(ctx, args...) - case stmt != nil: - return stmt.QueryRowContext(ctx, args...) - default: - return q.db.QueryRowContext(ctx, query, args...) - } -} - -type Queries struct { - db DBTX - tx *sql.Tx - createCityStmt *sql.Stmt - createVenueStmt *sql.Stmt - deleteVenueStmt *sql.Stmt - getCityStmt *sql.Stmt - getVenueStmt *sql.Stmt - listCitiesStmt *sql.Stmt - listVenuesStmt *sql.Stmt - updateCityNameStmt *sql.Stmt - updateVenueNameStmt *sql.Stmt - venueCountByCityStmt *sql.Stmt -} - -func (q *Queries) WithTx(tx *sql.Tx) *Queries { - return &Queries{ - db: tx, - tx: tx, - createCityStmt: q.createCityStmt, - createVenueStmt: q.createVenueStmt, - deleteVenueStmt: q.deleteVenueStmt, - getCityStmt: q.getCityStmt, - getVenueStmt: q.getVenueStmt, - listCitiesStmt: q.listCitiesStmt, - listVenuesStmt: q.listVenuesStmt, - updateCityNameStmt: q.updateCityNameStmt, - updateVenueNameStmt: q.updateVenueNameStmt, - venueCountByCityStmt: q.venueCountByCityStmt, - } -} diff --git a/internal/dao/slonik/ce/mysql/models.go b/internal/dao/slonik/ce/mysql/models.go deleted file mode 100644 index d315b7ca..00000000 --- a/internal/dao/slonik/ce/mysql/models.go +++ /dev/null @@ -1,75 +0,0 @@ -// Code generated by sqlc. DO NOT EDIT. -// versions: -// sqlc v1.16.0 - -package dbr - -import ( - "database/sql" - "database/sql/driver" - "fmt" - "time" -) - -type VenuesStatus string - -const ( - VenuesStatusOpen VenuesStatus = "open" - VenuesStatusClosed VenuesStatus = "closed" -) - -func (e *VenuesStatus) Scan(src interface{}) error { - switch s := src.(type) { - case []byte: - *e = VenuesStatus(s) - case string: - *e = VenuesStatus(s) - default: - return fmt.Errorf("unsupported scan type for VenuesStatus: %T", src) - } - return nil -} - -type NullVenuesStatus struct { - VenuesStatus VenuesStatus - Valid bool // Valid is true if VenuesStatus is not NULL -} - -// Scan implements the Scanner interface. -func (ns *NullVenuesStatus) Scan(value interface{}) error { - if value == nil { - ns.VenuesStatus, ns.Valid = "", false - return nil - } - ns.Valid = true - return ns.VenuesStatus.Scan(value) -} - -// Value implements the driver Valuer interface. -func (ns NullVenuesStatus) Value() (driver.Value, error) { - if !ns.Valid { - return nil, nil - } - return string(ns.VenuesStatus), nil -} - -type City struct { - Slug string - Name string -} - -// Venues are places where muisc happens -type Venue struct { - ID int64 - // Venues can be either open or closed - Status VenuesStatus - Statuses sql.NullString - // This value appears in public URLs - Slug string - Name string - City string - SpotifyPlaylist string - SongkickID sql.NullString - Tags sql.NullString - CreatedAt time.Time -} diff --git a/internal/dao/slonik/ce/mysql/querier.go b/internal/dao/slonik/ce/mysql/querier.go deleted file mode 100644 index 163269e6..00000000 --- a/internal/dao/slonik/ce/mysql/querier.go +++ /dev/null @@ -1,25 +0,0 @@ -// Code generated by sqlc. DO NOT EDIT. -// versions: -// sqlc v1.16.0 - -package dbr - -import ( - "context" - "database/sql" -) - -type Querier interface { - CreateCity(ctx context.Context, arg CreateCityParams) error - CreateVenue(ctx context.Context, arg CreateVenueParams) (sql.Result, error) - DeleteVenue(ctx context.Context, arg DeleteVenueParams) error - GetCity(ctx context.Context, slug string) (City, error) - GetVenue(ctx context.Context, arg GetVenueParams) (Venue, error) - ListCities(ctx context.Context) ([]City, error) - ListVenues(ctx context.Context, city string) ([]Venue, error) - UpdateCityName(ctx context.Context, arg UpdateCityNameParams) error - UpdateVenueName(ctx context.Context, arg UpdateVenueNameParams) error - VenueCountByCity(ctx context.Context) ([]VenueCountByCityRow, error) -} - -var _ Querier = (*Queries)(nil) diff --git a/internal/dao/slonik/ce/mysql/query/city.sql b/internal/dao/slonik/ce/mysql/query/city.sql deleted file mode 100644 index c387e9d0..00000000 --- a/internal/dao/slonik/ce/mysql/query/city.sql +++ /dev/null @@ -1,23 +0,0 @@ -/* name: ListCities :many */ -SELECT * -FROM city -ORDER BY name; - -/* name: GetCity :one */ -SELECT * -FROM city -WHERE slug = ?; - -/* name: CreateCity :exec */ -INSERT INTO city ( - name, - slug -) VALUES ( - ?, - ? -); - -/* name: UpdateCityName :exec */ -UPDATE city -SET name = ? -WHERE slug = ?; diff --git a/internal/dao/slonik/ce/mysql/query/venue.sql b/internal/dao/slonik/ce/mysql/query/venue.sql deleted file mode 100644 index a1dd7a16..00000000 --- a/internal/dao/slonik/ce/mysql/query/venue.sql +++ /dev/null @@ -1,48 +0,0 @@ -/* name: ListVenues :many */ -SELECT * -FROM venue -WHERE city = ? -ORDER BY name; - -/* name: DeleteVenue :exec */ -DELETE FROM venue -WHERE slug = ? AND slug = ?; - -/* name: GetVenue :one */ -SELECT * -FROM venue -WHERE slug = ? AND city = ?; - -/* name: CreateVenue :execresult */ -INSERT INTO venue ( - slug, - name, - city, - created_at, - spotify_playlist, - status, - statuses, - tags -) VALUES ( - ?, - ?, - ?, - NOW(), - ?, - ?, - ?, - ? -); - -/* name: UpdateVenueName :exec */ -UPDATE venue -SET name = ? -WHERE slug = ?; - -/* name: VenueCountByCity :many */ -SELECT - city, - count(*) -FROM venue -GROUP BY 1 -ORDER BY 1; diff --git a/internal/dao/slonik/ce/mysql/schema/0001_city.sql b/internal/dao/slonik/ce/mysql/schema/0001_city.sql deleted file mode 100644 index 6be35d16..00000000 --- a/internal/dao/slonik/ce/mysql/schema/0001_city.sql +++ /dev/null @@ -1,4 +0,0 @@ -CREATE TABLE city ( - slug varchar(255) PRIMARY KEY, - name text NOT NULL -) diff --git a/internal/dao/slonik/ce/mysql/schema/0002_venue.sql b/internal/dao/slonik/ce/mysql/schema/0002_venue.sql deleted file mode 100644 index 4fc842ce..00000000 --- a/internal/dao/slonik/ce/mysql/schema/0002_venue.sql +++ /dev/null @@ -1,12 +0,0 @@ -CREATE TABLE venues ( - id SERIAL primary key, - dropped text, - status ENUM('open', 'closed') not null COMMENT 'Venues can be either open or closed', - statuses text, -- status[], - slug text not null COMMENT 'This value appears in public URLs', - name varchar(255) not null, - city text not null references city(slug), - spotify_playlist varchar(255) not null, - songkick_id text, - tags text -- text[] -) COMMENT='Venues are places where muisc happens'; diff --git a/internal/dao/slonik/ce/mysql/schema/0003_add_column.sql b/internal/dao/slonik/ce/mysql/schema/0003_add_column.sql deleted file mode 100644 index 9b334bcc..00000000 --- a/internal/dao/slonik/ce/mysql/schema/0003_add_column.sql +++ /dev/null @@ -1,3 +0,0 @@ -ALTER TABLE venues RENAME TO venue; -ALTER TABLE venue ADD COLUMN created_at TIMESTAMP NOT NULL DEFAULT NOW(); -ALTER TABLE venue DROP COLUMN dropped; diff --git a/internal/dao/slonik/ce/mysql/venue.sql.go b/internal/dao/slonik/ce/mysql/venue.sql.go deleted file mode 100644 index 1bc2b0cb..00000000 --- a/internal/dao/slonik/ce/mysql/venue.sql.go +++ /dev/null @@ -1,193 +0,0 @@ -// Code generated by sqlc. DO NOT EDIT. -// versions: -// sqlc v1.16.0 -// source: venue.sql - -package dbr - -import ( - "context" - "database/sql" -) - -const createVenue = `-- name: CreateVenue :execresult -INSERT INTO venue ( - slug, - name, - city, - created_at, - spotify_playlist, - status, - statuses, - tags -) VALUES ( - ?, - ?, - ?, - NOW(), - ?, - ?, - ?, - ? -) -` - -type CreateVenueParams struct { - Slug string - Name string - City string - SpotifyPlaylist string - Status VenuesStatus - Statuses sql.NullString - Tags sql.NullString -} - -func (q *Queries) CreateVenue(ctx context.Context, arg CreateVenueParams) (sql.Result, error) { - return q.exec(ctx, q.createVenueStmt, createVenue, - arg.Slug, - arg.Name, - arg.City, - arg.SpotifyPlaylist, - arg.Status, - arg.Statuses, - arg.Tags, - ) -} - -const deleteVenue = `-- name: DeleteVenue :exec -DELETE FROM venue -WHERE slug = ? AND slug = ? -` - -type DeleteVenueParams struct { - Slug string - Slug_2 string -} - -func (q *Queries) DeleteVenue(ctx context.Context, arg DeleteVenueParams) error { - _, err := q.exec(ctx, q.deleteVenueStmt, deleteVenue, arg.Slug, arg.Slug_2) - return err -} - -const getVenue = `-- name: GetVenue :one -SELECT id, status, statuses, slug, name, city, spotify_playlist, songkick_id, tags, created_at -FROM venue -WHERE slug = ? AND city = ? -` - -type GetVenueParams struct { - Slug string - City string -} - -func (q *Queries) GetVenue(ctx context.Context, arg GetVenueParams) (Venue, error) { - row := q.queryRow(ctx, q.getVenueStmt, getVenue, arg.Slug, arg.City) - var i Venue - err := row.Scan( - &i.ID, - &i.Status, - &i.Statuses, - &i.Slug, - &i.Name, - &i.City, - &i.SpotifyPlaylist, - &i.SongkickID, - &i.Tags, - &i.CreatedAt, - ) - return i, err -} - -const listVenues = `-- name: ListVenues :many -SELECT id, status, statuses, slug, name, city, spotify_playlist, songkick_id, tags, created_at -FROM venue -WHERE city = ? -ORDER BY name -` - -func (q *Queries) ListVenues(ctx context.Context, city string) ([]Venue, error) { - rows, err := q.query(ctx, q.listVenuesStmt, listVenues, city) - if err != nil { - return nil, err - } - defer rows.Close() - var items []Venue - for rows.Next() { - var i Venue - if err := rows.Scan( - &i.ID, - &i.Status, - &i.Statuses, - &i.Slug, - &i.Name, - &i.City, - &i.SpotifyPlaylist, - &i.SongkickID, - &i.Tags, - &i.CreatedAt, - ); err != nil { - return nil, err - } - items = append(items, i) - } - if err := rows.Close(); err != nil { - return nil, err - } - if err := rows.Err(); err != nil { - return nil, err - } - return items, nil -} - -const updateVenueName = `-- name: UpdateVenueName :exec -UPDATE venue -SET name = ? -WHERE slug = ? -` - -type UpdateVenueNameParams struct { - Name string - Slug string -} - -func (q *Queries) UpdateVenueName(ctx context.Context, arg UpdateVenueNameParams) error { - _, err := q.exec(ctx, q.updateVenueNameStmt, updateVenueName, arg.Name, arg.Slug) - return err -} - -const venueCountByCity = `-- name: VenueCountByCity :many -SELECT - city, - count(*) -FROM venue -GROUP BY 1 -ORDER BY 1 -` - -type VenueCountByCityRow struct { - City string - Count int64 -} - -func (q *Queries) VenueCountByCity(ctx context.Context) ([]VenueCountByCityRow, error) { - rows, err := q.query(ctx, q.venueCountByCityStmt, venueCountByCity) - if err != nil { - return nil, err - } - defer rows.Close() - var items []VenueCountByCityRow - for rows.Next() { - var i VenueCountByCityRow - if err := rows.Scan(&i.City, &i.Count); err != nil { - return nil, err - } - items = append(items, i) - } - if err := rows.Close(); err != nil { - return nil, err - } - if err := rows.Err(); err != nil { - return nil, err - } - return items, nil -} diff --git a/internal/dao/slonik/ce/sqlc.yaml b/internal/dao/slonik/ce/sqlc.yaml index dd0d6bfa..230f8cb4 100644 --- a/internal/dao/slonik/ce/sqlc.yaml +++ b/internal/dao/slonik/ce/sqlc.yaml @@ -10,21 +10,3 @@ sql: sql_package: 'pgx/v5' emit_prepared_queries: true emit_interface: true - - schema: mysql/schema - queries: mysql/query - engine: mysql - gen: - go: - package: dbr - out: mysql - emit_prepared_queries: true - emit_interface: true - - schema: sqlite/schema - queries: sqlite/query - engine: sqlite - gen: - go: - package: dbr - out: sqlite - emit_prepared_queries: true - emit_interface: true diff --git a/internal/dao/slonik/ce/sqlite/city.sql.go b/internal/dao/slonik/ce/sqlite/city.sql.go deleted file mode 100644 index 75ea6e41..00000000 --- a/internal/dao/slonik/ce/sqlite/city.sql.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by sqlc. DO NOT EDIT. -// versions: -// sqlc v1.16.0 -// source: city.sql - -package dbr - -import ( - "context" -) - -const createCity = `-- name: CreateCity :exec -INSERT INTO city ( - name, - slug -) VALUES ( - ?, - ? -) -` - -type CreateCityParams struct { - Name string - Slug string -} - -func (q *Queries) CreateCity(ctx context.Context, arg CreateCityParams) error { - _, err := q.exec(ctx, q.createCityStmt, createCity, arg.Name, arg.Slug) - return err -} - -const getCity = `-- name: GetCity :one -SELECT slug, name -FROM city -WHERE slug = ? -` - -func (q *Queries) GetCity(ctx context.Context, slug string) (City, error) { - row := q.queryRow(ctx, q.getCityStmt, getCity, slug) - var i City - err := row.Scan(&i.Slug, &i.Name) - return i, err -} - -const listCities = `-- name: ListCities :many -SELECT slug, name -FROM city -ORDER BY name -` - -func (q *Queries) ListCities(ctx context.Context) ([]City, error) { - rows, err := q.query(ctx, q.listCitiesStmt, listCities) - if err != nil { - return nil, err - } - defer rows.Close() - var items []City - for rows.Next() { - var i City - if err := rows.Scan(&i.Slug, &i.Name); err != nil { - return nil, err - } - items = append(items, i) - } - if err := rows.Close(); err != nil { - return nil, err - } - if err := rows.Err(); err != nil { - return nil, err - } - return items, nil -} - -const updateCityName = `-- name: UpdateCityName :exec -UPDATE city -SET name = ? -WHERE slug = ? -` - -type UpdateCityNameParams struct { - Name string - Slug string -} - -func (q *Queries) UpdateCityName(ctx context.Context, arg UpdateCityNameParams) error { - _, err := q.exec(ctx, q.updateCityNameStmt, updateCityName, arg.Name, arg.Slug) - return err -} diff --git a/internal/dao/slonik/ce/sqlite/db.go b/internal/dao/slonik/ce/sqlite/db.go deleted file mode 100644 index 451eb52b..00000000 --- a/internal/dao/slonik/ce/sqlite/db.go +++ /dev/null @@ -1,178 +0,0 @@ -// Code generated by sqlc. DO NOT EDIT. -// versions: -// sqlc v1.16.0 - -package dbr - -import ( - "context" - "database/sql" - "fmt" -) - -type DBTX interface { - ExecContext(context.Context, string, ...interface{}) (sql.Result, error) - PrepareContext(context.Context, string) (*sql.Stmt, error) - QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) - QueryRowContext(context.Context, string, ...interface{}) *sql.Row -} - -func New(db DBTX) *Queries { - return &Queries{db: db} -} - -func Prepare(ctx context.Context, db DBTX) (*Queries, error) { - q := Queries{db: db} - var err error - if q.createCityStmt, err = db.PrepareContext(ctx, createCity); err != nil { - return nil, fmt.Errorf("error preparing query CreateCity: %w", err) - } - if q.createVenueStmt, err = db.PrepareContext(ctx, createVenue); err != nil { - return nil, fmt.Errorf("error preparing query CreateVenue: %w", err) - } - if q.deleteVenueStmt, err = db.PrepareContext(ctx, deleteVenue); err != nil { - return nil, fmt.Errorf("error preparing query DeleteVenue: %w", err) - } - if q.getCityStmt, err = db.PrepareContext(ctx, getCity); err != nil { - return nil, fmt.Errorf("error preparing query GetCity: %w", err) - } - if q.getVenueStmt, err = db.PrepareContext(ctx, getVenue); err != nil { - return nil, fmt.Errorf("error preparing query GetVenue: %w", err) - } - if q.listCitiesStmt, err = db.PrepareContext(ctx, listCities); err != nil { - return nil, fmt.Errorf("error preparing query ListCities: %w", err) - } - if q.listVenuesStmt, err = db.PrepareContext(ctx, listVenues); err != nil { - return nil, fmt.Errorf("error preparing query ListVenues: %w", err) - } - if q.updateCityNameStmt, err = db.PrepareContext(ctx, updateCityName); err != nil { - return nil, fmt.Errorf("error preparing query UpdateCityName: %w", err) - } - if q.updateVenueNameStmt, err = db.PrepareContext(ctx, updateVenueName); err != nil { - return nil, fmt.Errorf("error preparing query UpdateVenueName: %w", err) - } - if q.venueCountByCityStmt, err = db.PrepareContext(ctx, venueCountByCity); err != nil { - return nil, fmt.Errorf("error preparing query VenueCountByCity: %w", err) - } - return &q, nil -} - -func (q *Queries) Close() error { - var err error - if q.createCityStmt != nil { - if cerr := q.createCityStmt.Close(); cerr != nil { - err = fmt.Errorf("error closing createCityStmt: %w", cerr) - } - } - if q.createVenueStmt != nil { - if cerr := q.createVenueStmt.Close(); cerr != nil { - err = fmt.Errorf("error closing createVenueStmt: %w", cerr) - } - } - if q.deleteVenueStmt != nil { - if cerr := q.deleteVenueStmt.Close(); cerr != nil { - err = fmt.Errorf("error closing deleteVenueStmt: %w", cerr) - } - } - if q.getCityStmt != nil { - if cerr := q.getCityStmt.Close(); cerr != nil { - err = fmt.Errorf("error closing getCityStmt: %w", cerr) - } - } - if q.getVenueStmt != nil { - if cerr := q.getVenueStmt.Close(); cerr != nil { - err = fmt.Errorf("error closing getVenueStmt: %w", cerr) - } - } - if q.listCitiesStmt != nil { - if cerr := q.listCitiesStmt.Close(); cerr != nil { - err = fmt.Errorf("error closing listCitiesStmt: %w", cerr) - } - } - if q.listVenuesStmt != nil { - if cerr := q.listVenuesStmt.Close(); cerr != nil { - err = fmt.Errorf("error closing listVenuesStmt: %w", cerr) - } - } - if q.updateCityNameStmt != nil { - if cerr := q.updateCityNameStmt.Close(); cerr != nil { - err = fmt.Errorf("error closing updateCityNameStmt: %w", cerr) - } - } - if q.updateVenueNameStmt != nil { - if cerr := q.updateVenueNameStmt.Close(); cerr != nil { - err = fmt.Errorf("error closing updateVenueNameStmt: %w", cerr) - } - } - if q.venueCountByCityStmt != nil { - if cerr := q.venueCountByCityStmt.Close(); cerr != nil { - err = fmt.Errorf("error closing venueCountByCityStmt: %w", cerr) - } - } - return err -} - -func (q *Queries) exec(ctx context.Context, stmt *sql.Stmt, query string, args ...interface{}) (sql.Result, error) { - switch { - case stmt != nil && q.tx != nil: - return q.tx.StmtContext(ctx, stmt).ExecContext(ctx, args...) - case stmt != nil: - return stmt.ExecContext(ctx, args...) - default: - return q.db.ExecContext(ctx, query, args...) - } -} - -func (q *Queries) query(ctx context.Context, stmt *sql.Stmt, query string, args ...interface{}) (*sql.Rows, error) { - switch { - case stmt != nil && q.tx != nil: - return q.tx.StmtContext(ctx, stmt).QueryContext(ctx, args...) - case stmt != nil: - return stmt.QueryContext(ctx, args...) - default: - return q.db.QueryContext(ctx, query, args...) - } -} - -func (q *Queries) queryRow(ctx context.Context, stmt *sql.Stmt, query string, args ...interface{}) *sql.Row { - switch { - case stmt != nil && q.tx != nil: - return q.tx.StmtContext(ctx, stmt).QueryRowContext(ctx, args...) - case stmt != nil: - return stmt.QueryRowContext(ctx, args...) - default: - return q.db.QueryRowContext(ctx, query, args...) - } -} - -type Queries struct { - db DBTX - tx *sql.Tx - createCityStmt *sql.Stmt - createVenueStmt *sql.Stmt - deleteVenueStmt *sql.Stmt - getCityStmt *sql.Stmt - getVenueStmt *sql.Stmt - listCitiesStmt *sql.Stmt - listVenuesStmt *sql.Stmt - updateCityNameStmt *sql.Stmt - updateVenueNameStmt *sql.Stmt - venueCountByCityStmt *sql.Stmt -} - -func (q *Queries) WithTx(tx *sql.Tx) *Queries { - return &Queries{ - db: tx, - tx: tx, - createCityStmt: q.createCityStmt, - createVenueStmt: q.createVenueStmt, - deleteVenueStmt: q.deleteVenueStmt, - getCityStmt: q.getCityStmt, - getVenueStmt: q.getVenueStmt, - listCitiesStmt: q.listCitiesStmt, - listVenuesStmt: q.listVenuesStmt, - updateCityNameStmt: q.updateCityNameStmt, - updateVenueNameStmt: q.updateVenueNameStmt, - venueCountByCityStmt: q.venueCountByCityStmt, - } -} diff --git a/internal/dao/slonik/ce/sqlite/models.go b/internal/dao/slonik/ce/sqlite/models.go deleted file mode 100644 index a178d14a..00000000 --- a/internal/dao/slonik/ce/sqlite/models.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by sqlc. DO NOT EDIT. -// versions: -// sqlc v1.16.0 - -package dbr - -import ( - "database/sql" - "time" -) - -type City struct { - Slug string - Name string -} - -type Venue struct { - ID int64 - Status string - Statuses sql.NullString - Slug string - Name string - City string - SpotifyPlaylist string - SongkickID sql.NullString - Tags sql.NullString - CreatedAt time.Time -} diff --git a/internal/dao/slonik/ce/sqlite/querier.go b/internal/dao/slonik/ce/sqlite/querier.go deleted file mode 100644 index 163269e6..00000000 --- a/internal/dao/slonik/ce/sqlite/querier.go +++ /dev/null @@ -1,25 +0,0 @@ -// Code generated by sqlc. DO NOT EDIT. -// versions: -// sqlc v1.16.0 - -package dbr - -import ( - "context" - "database/sql" -) - -type Querier interface { - CreateCity(ctx context.Context, arg CreateCityParams) error - CreateVenue(ctx context.Context, arg CreateVenueParams) (sql.Result, error) - DeleteVenue(ctx context.Context, arg DeleteVenueParams) error - GetCity(ctx context.Context, slug string) (City, error) - GetVenue(ctx context.Context, arg GetVenueParams) (Venue, error) - ListCities(ctx context.Context) ([]City, error) - ListVenues(ctx context.Context, city string) ([]Venue, error) - UpdateCityName(ctx context.Context, arg UpdateCityNameParams) error - UpdateVenueName(ctx context.Context, arg UpdateVenueNameParams) error - VenueCountByCity(ctx context.Context) ([]VenueCountByCityRow, error) -} - -var _ Querier = (*Queries)(nil) diff --git a/internal/dao/slonik/ce/sqlite/query/city.sql b/internal/dao/slonik/ce/sqlite/query/city.sql deleted file mode 100644 index c387e9d0..00000000 --- a/internal/dao/slonik/ce/sqlite/query/city.sql +++ /dev/null @@ -1,23 +0,0 @@ -/* name: ListCities :many */ -SELECT * -FROM city -ORDER BY name; - -/* name: GetCity :one */ -SELECT * -FROM city -WHERE slug = ?; - -/* name: CreateCity :exec */ -INSERT INTO city ( - name, - slug -) VALUES ( - ?, - ? -); - -/* name: UpdateCityName :exec */ -UPDATE city -SET name = ? -WHERE slug = ?; diff --git a/internal/dao/slonik/ce/sqlite/query/venue.sql b/internal/dao/slonik/ce/sqlite/query/venue.sql deleted file mode 100644 index b4f5fd40..00000000 --- a/internal/dao/slonik/ce/sqlite/query/venue.sql +++ /dev/null @@ -1,48 +0,0 @@ -/* name: ListVenues :many */ -SELECT * -FROM venue -WHERE city = ? -ORDER BY name; - -/* name: DeleteVenue :exec */ -DELETE FROM venue -WHERE slug = ? AND slug = ?; - -/* name: GetVenue :one */ -SELECT * -FROM venue -WHERE slug = ? AND city = ?; - -/* name: CreateVenue :execresult */ -INSERT INTO venue ( - slug, - name, - city, - created_at, - spotify_playlist, - status, - statuses, - tags -) VALUES ( - ?, - ?, - ?, - CURRENT_TIMESTAMP, - ?, - ?, - ?, - ? -); - -/* name: UpdateVenueName :exec */ -UPDATE venue -SET name = ? -WHERE slug = ?; - -/* name: VenueCountByCity :many */ -SELECT - city, - count(*) -FROM venue -GROUP BY 1 -ORDER BY 1; diff --git a/internal/dao/slonik/ce/sqlite/schema/0001_city.sql b/internal/dao/slonik/ce/sqlite/schema/0001_city.sql deleted file mode 100644 index 6be35d16..00000000 --- a/internal/dao/slonik/ce/sqlite/schema/0001_city.sql +++ /dev/null @@ -1,4 +0,0 @@ -CREATE TABLE city ( - slug varchar(255) PRIMARY KEY, - name text NOT NULL -) diff --git a/internal/dao/slonik/ce/sqlite/schema/0002_venue.sql b/internal/dao/slonik/ce/sqlite/schema/0002_venue.sql deleted file mode 100644 index e57166e4..00000000 --- a/internal/dao/slonik/ce/sqlite/schema/0002_venue.sql +++ /dev/null @@ -1,13 +0,0 @@ -CREATE TABLE venues ( - id integer primary key AUTOINCREMENT, - dropped text, - status text not null, - statuses text, -- status[] - slug text not null, - name varchar(255) not null, - city text not null references city(slug), - spotify_playlist varchar(255) not null, - songkick_id text, - tags text, -- tags[] - CHECK (status = 'open' OR status = 'closed') -); diff --git a/internal/dao/slonik/ce/sqlite/schema/0003_add_column.sql b/internal/dao/slonik/ce/sqlite/schema/0003_add_column.sql deleted file mode 100644 index 7d7a6443..00000000 --- a/internal/dao/slonik/ce/sqlite/schema/0003_add_column.sql +++ /dev/null @@ -1,3 +0,0 @@ -ALTER TABLE venues RENAME TO venue; -ALTER TABLE venue ADD COLUMN created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP; -ALTER TABLE venue DROP COLUMN dropped; diff --git a/internal/dao/slonik/ce/sqlite/venue.sql.go b/internal/dao/slonik/ce/sqlite/venue.sql.go deleted file mode 100644 index 273a4caa..00000000 --- a/internal/dao/slonik/ce/sqlite/venue.sql.go +++ /dev/null @@ -1,193 +0,0 @@ -// Code generated by sqlc. DO NOT EDIT. -// versions: -// sqlc v1.16.0 -// source: venue.sql - -package dbr - -import ( - "context" - "database/sql" -) - -const createVenue = `-- name: CreateVenue :execresult -INSERT INTO venue ( - slug, - name, - city, - created_at, - spotify_playlist, - status, - statuses, - tags -) VALUES ( - ?, - ?, - ?, - CURRENT_TIMESTAMP, - ?, - ?, - ?, - ? -) -` - -type CreateVenueParams struct { - Slug string - Name string - City string - SpotifyPlaylist string - Status string - Statuses sql.NullString - Tags sql.NullString -} - -func (q *Queries) CreateVenue(ctx context.Context, arg CreateVenueParams) (sql.Result, error) { - return q.exec(ctx, q.createVenueStmt, createVenue, - arg.Slug, - arg.Name, - arg.City, - arg.SpotifyPlaylist, - arg.Status, - arg.Statuses, - arg.Tags, - ) -} - -const deleteVenue = `-- name: DeleteVenue :exec -DELETE FROM venue -WHERE slug = ? AND slug = ? -` - -type DeleteVenueParams struct { - Slug string - Slug_2 string -} - -func (q *Queries) DeleteVenue(ctx context.Context, arg DeleteVenueParams) error { - _, err := q.exec(ctx, q.deleteVenueStmt, deleteVenue, arg.Slug, arg.Slug_2) - return err -} - -const getVenue = `-- name: GetVenue :one -SELECT id, status, statuses, slug, name, city, spotify_playlist, songkick_id, tags, created_at -FROM venue -WHERE slug = ? AND city = ? -` - -type GetVenueParams struct { - Slug string - City string -} - -func (q *Queries) GetVenue(ctx context.Context, arg GetVenueParams) (Venue, error) { - row := q.queryRow(ctx, q.getVenueStmt, getVenue, arg.Slug, arg.City) - var i Venue - err := row.Scan( - &i.ID, - &i.Status, - &i.Statuses, - &i.Slug, - &i.Name, - &i.City, - &i.SpotifyPlaylist, - &i.SongkickID, - &i.Tags, - &i.CreatedAt, - ) - return i, err -} - -const listVenues = `-- name: ListVenues :many -SELECT id, status, statuses, slug, name, city, spotify_playlist, songkick_id, tags, created_at -FROM venue -WHERE city = ? -ORDER BY name -` - -func (q *Queries) ListVenues(ctx context.Context, city string) ([]Venue, error) { - rows, err := q.query(ctx, q.listVenuesStmt, listVenues, city) - if err != nil { - return nil, err - } - defer rows.Close() - var items []Venue - for rows.Next() { - var i Venue - if err := rows.Scan( - &i.ID, - &i.Status, - &i.Statuses, - &i.Slug, - &i.Name, - &i.City, - &i.SpotifyPlaylist, - &i.SongkickID, - &i.Tags, - &i.CreatedAt, - ); err != nil { - return nil, err - } - items = append(items, i) - } - if err := rows.Close(); err != nil { - return nil, err - } - if err := rows.Err(); err != nil { - return nil, err - } - return items, nil -} - -const updateVenueName = `-- name: UpdateVenueName :exec -UPDATE venue -SET name = ? -WHERE slug = ? -` - -type UpdateVenueNameParams struct { - Name string - Slug string -} - -func (q *Queries) UpdateVenueName(ctx context.Context, arg UpdateVenueNameParams) error { - _, err := q.exec(ctx, q.updateVenueNameStmt, updateVenueName, arg.Name, arg.Slug) - return err -} - -const venueCountByCity = `-- name: VenueCountByCity :many -SELECT - city, - count(*) -FROM venue -GROUP BY 1 -ORDER BY 1 -` - -type VenueCountByCityRow struct { - City string - Count int64 -} - -func (q *Queries) VenueCountByCity(ctx context.Context) ([]VenueCountByCityRow, error) { - rows, err := q.query(ctx, q.venueCountByCityStmt, venueCountByCity) - if err != nil { - return nil, err - } - defer rows.Close() - var items []VenueCountByCityRow - for rows.Next() { - var i VenueCountByCityRow - if err := rows.Scan(&i.City, &i.Count); err != nil { - return nil, err - } - items = append(items, i) - } - if err := rows.Close(); err != nil { - return nil, err - } - if err := rows.Err(); err != nil { - return nil, err - } - return items, nil -} diff --git a/internal/dao/slonik/comments.go b/internal/dao/slonik/comments.go new file mode 100644 index 00000000..c690dc3b --- /dev/null +++ b/internal/dao/slonik/comments.go @@ -0,0 +1,107 @@ +// Copyright 2023 ROC. All rights reserved. +// Use of this source code is governed by a MIT style +// license that can be found in the LICENSE file. + +package slonik + +import ( + "github.com/jackc/pgx/v5" + "github.com/rocboss/paopao-ce/internal/core" + dbr "github.com/rocboss/paopao-ce/internal/dao/slonik/ce/postgres" + "github.com/rocboss/paopao-ce/pkg/debug" +) + +var ( + _ core.CommentService = (*commentServant)(nil) + _ core.CommentManageService = (*commentManageServant)(nil) +) + +type commentServant struct { + db *pgx.Conn + q dbr.Querier +} + +type commentManageServant struct { + db *pgx.Conn + q dbr.Querier +} + +func (s *commentServant) GetComments(conditions *core.ConditionsT, offset, limit int) ([]*core.Comment, error) { + // TODO + debug.NotImplemented() + return nil, nil +} + +func (s *commentServant) GetCommentByID(id int64) (*core.Comment, error) { + // TODO + debug.NotImplemented() + return nil, nil +} + +func (s *commentServant) GetCommentReplyByID(id int64) (*core.CommentReply, error) { + // TODO + debug.NotImplemented() + return nil, nil +} + +func (s *commentServant) GetCommentCount(conditions *core.ConditionsT) (int64, error) { + // TODO + debug.NotImplemented() + return 0, nil +} + +func (s *commentServant) GetCommentContentsByIDs(ids []int64) ([]*core.CommentContent, error) { + // TODO + debug.NotImplemented() + return nil, nil +} + +func (s *commentServant) GetCommentRepliesByID(ids []int64) ([]*core.CommentReplyFormated, error) { + // TODO + debug.NotImplemented() + return nil, nil +} + +func (s *commentManageServant) DeleteComment(comment *core.Comment) error { + // TODO + debug.NotImplemented() + return nil +} + +func (s *commentManageServant) CreateComment(comment *core.Comment) (*core.Comment, error) { + // TODO + debug.NotImplemented() + return nil, nil +} + +func (s *commentManageServant) CreateCommentReply(reply *core.CommentReply) (*core.CommentReply, error) { + // TODO + debug.NotImplemented() + return nil, nil +} + +func (s *commentManageServant) DeleteCommentReply(reply *core.CommentReply) error { + // TODO + debug.NotImplemented() + return nil +} + +func (s *commentManageServant) CreateCommentContent(content *core.CommentContent) (*core.CommentContent, error) { + // TODO + debug.NotImplemented() + return nil, nil +} + +func newCommentService(db *pgx.Conn) core.CommentService { + return &commentServant{ + db: db, + q: dbr.New(db), + } +} + +func newCommentManageService(db *pgx.Conn) core.CommentManageService { + return &commentManageServant{ + db: db, + q: dbr.New(db), + } +} diff --git a/internal/dao/slonik/contacts.go b/internal/dao/slonik/contacts.go new file mode 100644 index 00000000..e725989b --- /dev/null +++ b/internal/dao/slonik/contacts.go @@ -0,0 +1,64 @@ +// Copyright 2023 ROC. All rights reserved. +// Use of this source code is governed by a MIT style +// license that can be found in the LICENSE file. + +package slonik + +import ( + "github.com/jackc/pgx/v5" + "github.com/rocboss/paopao-ce/internal/core" + dbr "github.com/rocboss/paopao-ce/internal/dao/slonik/ce/postgres" + "github.com/rocboss/paopao-ce/pkg/debug" +) + +var ( + _ core.ContactManageService = (*contactManageServant)(nil) +) + +type contactManageServant struct { + db *pgx.Conn + q dbr.Querier +} + +func (s *contactManageServant) RequestingFriend(userId int64, friendId int64, greetings string) (err error) { + // TODO + debug.NotImplemented() + return nil +} + +func (s *contactManageServant) AddFriend(userId int64, friendId int64) (err error) { + // TODO + debug.NotImplemented() + return nil +} + +func (s *contactManageServant) RejectFriend(userId int64, friendId int64) (err error) { + // TODO + debug.NotImplemented() + return nil +} + +func (s *contactManageServant) DeleteFriend(userId int64, friendId int64) (err error) { + // TODO + debug.NotImplemented() + return nil +} + +func (s *contactManageServant) GetContacts(userId int64, offset int, limit int) (*core.ContactList, error) { + // TODO + debug.NotImplemented() + return nil, nil +} + +func (s *contactManageServant) IsFriend(userId int64, friendId int64) bool { + // TODO + debug.NotImplemented() + return false +} + +func newContactManageService(db *pgx.Conn) core.ContactManageService { + return &contactManageServant{ + db: db, + q: dbr.New(db), + } +} diff --git a/internal/dao/slonik/index.go b/internal/dao/slonik/index.go new file mode 100644 index 00000000..3a90fb64 --- /dev/null +++ b/internal/dao/slonik/index.go @@ -0,0 +1,55 @@ +// Copyright 2023 ROC. All rights reserved. +// Use of this source code is governed by a MIT style +// license that can be found in the LICENSE file. + +package slonik + +import ( + "github.com/jackc/pgx/v5" + "github.com/rocboss/paopao-ce/internal/core" + dbr "github.com/rocboss/paopao-ce/internal/dao/slonik/ce/postgres" + "github.com/rocboss/paopao-ce/pkg/debug" +) + +var ( + _ core.IndexPostsService = (*indexPostsServant)(nil) + _ core.IndexPostsService = (*simpleIndexPostsServant)(nil) +) + +type indexPostsServant struct { + db *pgx.Conn + q dbr.Querier +} + +type simpleIndexPostsServant struct { + db *pgx.Conn + q dbr.Querier +} + +// IndexPosts 根据userId查询广场推文列表,简单做到不同用户的主页都是不同的; +func (s *indexPostsServant) IndexPosts(user *core.User, offset int, limit int) (*core.IndexTweetList, error) { + // TODO + debug.NotImplemented() + return nil, nil +} + +// simpleCacheIndexGetPosts simpleCacheIndex 专属获取广场推文列表函数 +func (s *simpleIndexPostsServant) IndexPosts(_user *core.User, offset int, limit int) (*core.IndexTweetList, error) { + // TODO + debug.NotImplemented() + return nil, nil +} + +func newIndexPostsService(db *pgx.Conn) core.IndexPostsService { + return &indexPostsServant{ + db: db, + q: dbr.New(db), + } +} + +func newSimpleIndexPostsService(db *pgx.Conn) core.IndexPostsService { + return &simpleIndexPostsServant{ + db: db, + q: dbr.New(db), + } +} diff --git a/internal/dao/slonik/messages.go b/internal/dao/slonik/messages.go new file mode 100644 index 00000000..635f8eac --- /dev/null +++ b/internal/dao/slonik/messages.go @@ -0,0 +1,64 @@ +// Copyright 2023 ROC. All rights reserved. +// Use of this source code is governed by a MIT style +// license that can be found in the LICENSE file. + +package slonik + +import ( + "github.com/jackc/pgx/v5" + "github.com/rocboss/paopao-ce/internal/core" + dbr "github.com/rocboss/paopao-ce/internal/dao/slonik/ce/postgres" + "github.com/rocboss/paopao-ce/pkg/debug" +) + +var ( + _ core.MessageService = (*messageServant)(nil) +) + +type messageServant struct { + db *pgx.Conn + q dbr.Querier +} + +func (s *messageServant) CreateMessage(msg *core.Message) (*core.Message, error) { + // TODO + debug.NotImplemented() + return nil, nil +} + +func (s *messageServant) GetUnreadCount(userID int64) (int64, error) { + // TODO + debug.NotImplemented() + return 0, nil +} + +func (s *messageServant) GetMessageByID(id int64) (*core.Message, error) { + // TODO + debug.NotImplemented() + return nil, nil +} + +func (s *messageServant) ReadMessage(message *core.Message) error { + // TODO + debug.NotImplemented() + return nil +} + +func (s *messageServant) GetMessages(conditions *core.ConditionsT, offset, limit int) ([]*core.MessageFormated, error) { + // TODO + debug.NotImplemented() + return nil, nil +} + +func (s *messageServant) GetMessageCount(conditions *core.ConditionsT) (int64, error) { + // TODO + debug.NotImplemented() + return 0, nil +} + +func newMessageService(db *pgx.Conn) core.MessageService { + return &messageServant{ + db: db, + q: dbr.New(db), + } +} diff --git a/internal/dao/slonik/pgx.go b/internal/dao/slonik/pgx.go new file mode 100644 index 00000000..a41251a1 --- /dev/null +++ b/internal/dao/slonik/pgx.go @@ -0,0 +1,24 @@ +// Copyright 2023 ROC. All rights reserved. +// Use of this source code is governed by a MIT style +// license that can be found in the LICENSE file. + +package slonik + +import ( + "sync" + + "github.com/jackc/pgx/v5" + "github.com/rocboss/paopao-ce/internal/conf" +) + +var ( + _pgxDB *pgx.Conn + _oncePgx sync.Once +) + +func pgxDB() *pgx.Conn { + _oncePgx.Do(func() { + _pgxDB = conf.MustPgxDB() + }) + return _pgxDB +} diff --git a/internal/dao/slonik/security.go b/internal/dao/slonik/security.go new file mode 100644 index 00000000..e87a670a --- /dev/null +++ b/internal/dao/slonik/security.go @@ -0,0 +1,49 @@ +// Copyright 2023 ROC. All rights reserved. +// Use of this source code is governed by a MIT style +// license that can be found in the LICENSE file. + +package slonik + +import ( + "github.com/jackc/pgx/v5" + "github.com/rocboss/paopao-ce/internal/core" + dbr "github.com/rocboss/paopao-ce/internal/dao/slonik/ce/postgres" + "github.com/rocboss/paopao-ce/pkg/debug" +) + +var ( + _ core.SecurityService = (*securityServant)(nil) +) + +type securityServant struct { + db *pgx.Conn + q dbr.Querier +} + +// GetLatestPhoneCaptcha 获取最新短信验证码 +func (s *securityServant) GetLatestPhoneCaptcha(phone string) (*core.Captcha, error) { + // TODO + debug.NotImplemented() + return nil, nil +} + +// UsePhoneCaptcha 更新短信验证码 +func (s *securityServant) UsePhoneCaptcha(captcha *core.Captcha) error { + // TODO + debug.NotImplemented() + return nil +} + +// SendPhoneCaptcha 发送短信验证码 +func (s *securityServant) SendPhoneCaptcha(phone string) error { + // TODO + debug.NotImplemented() + return nil +} + +func newSecurityService(db *pgx.Conn, phoneVerify core.PhoneVerifyService) core.SecurityService { + return &securityServant{ + db: db, + q: dbr.New(db), + } +} diff --git a/internal/dao/slonik/slonik.go b/internal/dao/slonik/slonik.go index bb8f82ad..ac2f20d1 100644 --- a/internal/dao/slonik/slonik.go +++ b/internal/dao/slonik/slonik.go @@ -1,23 +1,86 @@ -// Copyright 2022 ROC. All rights reserved. +// Copyright 2023 ROC. All rights reserved. // Use of this source code is governed by a MIT style // license that can be found in the LICENSE file. -// Core service implement base sqlx+postgresql. All sub-service -// will declare here and provide initial function. - package slonik import ( + "github.com/Masterminds/semver/v3" + "github.com/alimy/cfg" "github.com/rocboss/paopao-ce/internal/core" + "github.com/rocboss/paopao-ce/internal/dao/cache" + "github.com/rocboss/paopao-ce/internal/dao/security" "github.com/sirupsen/logrus" ) +var ( + _ core.DataService = (*dataServant)(nil) + _ core.VersionInfo = (*dataServant)(nil) +) + +type dataServant struct { + core.IndexPostsService + core.WalletService + core.MessageService + core.TopicService + core.TweetService + core.TweetManageService + core.TweetHelpService + core.CommentService + core.CommentManageService + core.UserManageService + core.ContactManageService + core.SecurityService + core.AttachmentCheckService +} + func NewDataService() (core.DataService, core.VersionInfo) { - logrus.Fatal("not support now") - return nil, nil + // initialize CacheIndex if needed + var ( + c core.CacheIndexService + v core.VersionInfo + ) + db := pgxDB() + pvs := security.NewPhoneVerifyService() + + i := newIndexPostsService(db) + if cfg.If("SimpleCacheIndex") { + i = newSimpleIndexPostsService(db) + c, v = cache.NewSimpleCacheIndexService(i) + } else if cfg.If("BigCacheIndex") { + a := newAuthorizationManageService(db) + c, v = cache.NewBigCacheIndexService(i, a) + } else { + c, v = cache.NewNoneCacheIndexService(i) + } + logrus.Infof("use %s as cache index service by version: %s", v.Name(), v.Version()) + + ds := &dataServant{ + IndexPostsService: c, + WalletService: newWalletService(db), + MessageService: newMessageService(db), + TopicService: newTopicService(db), + TweetService: newTweetService(db), + TweetManageService: newTweetManageService(db, c), + TweetHelpService: newTweetHelpService(db), + CommentService: newCommentService(db), + CommentManageService: newCommentManageService(db), + UserManageService: newUserManageService(db), + ContactManageService: newContactManageService(db), + SecurityService: newSecurityService(db, pvs), + AttachmentCheckService: security.NewAttachmentCheckService(), + } + return ds, ds } func NewAuthorizationManageService() core.AuthorizationManageService { - logrus.Fatal("not support now") - return nil + return newAuthorizationManageService(pgxDB()) +} + +func (s *dataServant) Name() string { + return "sqlc/pgx" +} + +func (s *dataServant) Version() *semver.Version { + return semver.MustParse("v0.1.0") } diff --git a/internal/dao/slonik/topics.go b/internal/dao/slonik/topics.go new file mode 100644 index 00000000..76e9201a --- /dev/null +++ b/internal/dao/slonik/topics.go @@ -0,0 +1,52 @@ +// Copyright 2023 ROC. All rights reserved. +// Use of this source code is governed by a MIT style +// license that can be found in the LICENSE file. + +package slonik + +import ( + "github.com/jackc/pgx/v5" + "github.com/rocboss/paopao-ce/internal/core" + dbr "github.com/rocboss/paopao-ce/internal/dao/slonik/ce/postgres" + "github.com/rocboss/paopao-ce/pkg/debug" +) + +var ( + _ core.TopicService = (*topicServant)(nil) +) + +type topicServant struct { + db *pgx.Conn + q dbr.Querier +} + +func (s *topicServant) CreateTag(tag *core.Tag) (*core.Tag, error) { + // TODO + debug.NotImplemented() + return nil, nil +} + +func (s *topicServant) DeleteTag(tag *core.Tag) error { + // TODO + debug.NotImplemented() + return nil +} + +func (s *topicServant) GetTags(conditions *core.ConditionsT, offset, limit int) ([]*core.Tag, error) { + // TODO + debug.NotImplemented() + return nil, nil +} + +func (s *topicServant) GetTagsByKeyword(keyword string) ([]*core.Tag, error) { + // TODO + debug.NotImplemented() + return nil, nil +} + +func newTopicService(db *pgx.Conn) core.TopicService { + return &topicServant{ + db: db, + q: dbr.New(db), + } +} diff --git a/internal/dao/slonik/tweets.go b/internal/dao/slonik/tweets.go new file mode 100644 index 00000000..7528ec7f --- /dev/null +++ b/internal/dao/slonik/tweets.go @@ -0,0 +1,243 @@ +// Copyright 2023 ROC. All rights reserved. +// Use of this source code is governed by a MIT style +// license that can be found in the LICENSE file. + +package slonik + +import ( + "github.com/jackc/pgx/v5" + "github.com/rocboss/paopao-ce/internal/core" + dbr "github.com/rocboss/paopao-ce/internal/dao/slonik/ce/postgres" + "github.com/rocboss/paopao-ce/pkg/debug" + "gorm.io/gorm" +) + +var ( + _ core.TweetService = (*tweetServant)(nil) + _ core.TweetManageService = (*tweetManageServant)(nil) + _ core.TweetHelpService = (*tweetHelpServant)(nil) +) + +type tweetServant struct { + db *pgx.Conn + q dbr.Querier +} + +type tweetManageServant struct { + db *pgx.Conn + q dbr.Querier +} + +type tweetHelpServant struct { + db *pgx.Conn + q dbr.Querier +} + +// MergePosts post数据整合 +func (s *tweetHelpServant) MergePosts(posts []*core.Post) ([]*core.PostFormated, error) { + // TODO + debug.NotImplemented() + return nil, nil +} + +// RevampPosts post数据整形修复 +func (s *tweetHelpServant) RevampPosts(posts []*core.PostFormated) ([]*core.PostFormated, error) { + // TODO + debug.NotImplemented() + return nil, nil +} + +func (s *tweetHelpServant) getPostContentsByIDs(ids []int64) ([]*core.PostContent, error) { + // TODO + debug.NotImplemented() + return nil, nil +} + +func (s *tweetHelpServant) getUsersByIDs(ids []int64) ([]*core.User, error) { + // TODO + debug.NotImplemented() + return nil, nil +} + +func (s *tweetManageServant) CreatePostCollection(postID, userID int64) (*core.PostCollection, error) { + // TODO + debug.NotImplemented() + return nil, nil +} + +func (s *tweetManageServant) DeletePostCollection(p *core.PostCollection) error { + // TODO + debug.NotImplemented() + return nil +} + +func (s *tweetManageServant) CreatePostContent(content *core.PostContent) (*core.PostContent, error) { + // TODO + debug.NotImplemented() + return nil, nil +} + +func (s *tweetManageServant) CreateAttachment(attachment *core.Attachment) (*core.Attachment, error) { + // TODO + debug.NotImplemented() + return nil, nil +} + +func (s *tweetManageServant) CreatePost(post *core.Post) (*core.Post, error) { + // TODO + debug.NotImplemented() + return nil, nil +} + +func (s *tweetManageServant) DeletePost(post *core.Post) ([]string, error) { + // TODO + debug.NotImplemented() + return nil, nil +} + +func (s *tweetManageServant) deleteCommentByPostId(db *gorm.DB, postId int64) ([]string, error) { + // TODO + debug.NotImplemented() + return nil, nil +} + +func (s *tweetManageServant) LockPost(post *core.Post) error { + // TODO + debug.NotImplemented() + return nil +} + +func (s *tweetManageServant) StickPost(post *core.Post) error { + // TODO + debug.NotImplemented() + return nil +} + +func (s *tweetManageServant) VisiblePost(post *core.Post, visibility core.PostVisibleT) error { + // TODO + debug.NotImplemented() + return nil +} + +func (s *tweetManageServant) UpdatePost(post *core.Post) error { + // TODO + debug.NotImplemented() + return nil +} + +func (s *tweetManageServant) CreatePostStar(postID, userID int64) (*core.PostStar, error) { + // TODO + debug.NotImplemented() + return nil, nil +} + +func (s *tweetManageServant) DeletePostStar(p *core.PostStar) error { + // TODO + debug.NotImplemented() + return nil +} + +func (s *tweetServant) GetPostByID(id int64) (*core.Post, error) { + // TODO + debug.NotImplemented() + return nil, nil +} + +func (s *tweetServant) GetPosts(conditions *core.ConditionsT, offset, limit int) ([]*core.Post, error) { + // TODO + debug.NotImplemented() + return nil, nil +} + +func (s *tweetServant) GetPostCount(conditions *core.ConditionsT) (int64, error) { + // TODO + debug.NotImplemented() + return 0, nil +} + +func (s *tweetServant) GetUserPostStar(postID, userID int64) (*core.PostStar, error) { + // TODO + debug.NotImplemented() + return nil, nil +} + +func (s *tweetServant) GetUserPostStars(userID int64, offset, limit int) ([]*core.PostStar, error) { + // TODO + debug.NotImplemented() + return nil, nil +} + +func (s *tweetServant) GetUserPostStarCount(userID int64) (int64, error) { + // TODO + debug.NotImplemented() + return 0, nil +} + +func (s *tweetServant) GetUserPostCollection(postID, userID int64) (*core.PostCollection, error) { + // TODO + debug.NotImplemented() + return nil, nil +} + +func (s *tweetServant) GetUserPostCollections(userID int64, offset, limit int) ([]*core.PostCollection, error) { + // TODO + debug.NotImplemented() + return nil, nil +} + +func (s *tweetServant) GetUserPostCollectionCount(userID int64) (int64, error) { + // TODO + debug.NotImplemented() + return 0, nil +} + +func (s *tweetServant) GetUserWalletBills(userID int64, offset, limit int) ([]*core.WalletStatement, error) { + // TODO + debug.NotImplemented() + return nil, nil +} + +func (s *tweetServant) GetUserWalletBillCount(userID int64) (int64, error) { + // TODO + debug.NotImplemented() + return 0, nil +} + +func (s *tweetServant) GetPostAttatchmentBill(postID, userID int64) (*core.PostAttachmentBill, error) { + // TODO + debug.NotImplemented() + return nil, nil +} + +func (s *tweetServant) GetPostContentsByIDs(ids []int64) ([]*core.PostContent, error) { + // TODO + debug.NotImplemented() + return nil, nil +} + +func (s *tweetServant) GetPostContentByID(id int64) (*core.PostContent, error) { + // TODO + debug.NotImplemented() + return nil, nil +} + +func newTweetService(db *pgx.Conn) core.TweetService { + return &tweetServant{ + db: db, + q: dbr.New(db), + } +} + +func newTweetManageService(db *pgx.Conn, cacheIndex core.CacheIndexService) core.TweetManageService { + return &tweetManageServant{ + db: db, + q: dbr.New(db), + } +} + +func newTweetHelpService(db *pgx.Conn) core.TweetHelpService { + return &tweetHelpServant{ + db: db, + q: dbr.New(db), + } +} diff --git a/internal/dao/slonik/user.go b/internal/dao/slonik/user.go new file mode 100644 index 00000000..71f9806f --- /dev/null +++ b/internal/dao/slonik/user.go @@ -0,0 +1,76 @@ +// Copyright 2023 ROC. All rights reserved. +// Use of this source code is governed by a MIT style +// license that can be found in the LICENSE file. + +package slonik + +import ( + "github.com/jackc/pgx/v5" + "github.com/rocboss/paopao-ce/internal/core" + dbr "github.com/rocboss/paopao-ce/internal/dao/slonik/ce/postgres" + "github.com/rocboss/paopao-ce/pkg/debug" +) + +var ( + _ core.UserManageService = (*userManageServant)(nil) +) + +type userManageServant struct { + db *pgx.Conn + q dbr.Querier +} + +func (s *userManageServant) GetUserByID(id int64) (*core.User, error) { + // TODO + debug.NotImplemented() + return nil, nil +} + +func (s *userManageServant) GetUserByUsername(username string) (*core.User, error) { + // TODO + debug.NotImplemented() + return nil, nil +} + +func (s *userManageServant) GetUserByPhone(phone string) (*core.User, error) { + // TODO + debug.NotImplemented() + return nil, nil +} + +func (s *userManageServant) GetUsersByIDs(ids []int64) ([]*core.User, error) { + // TODO + debug.NotImplemented() + return nil, nil +} + +func (s *userManageServant) GetUsersByKeyword(keyword string) ([]*core.User, error) { + // TODO + debug.NotImplemented() + return nil, nil +} + +func (s *userManageServant) GetTagsByKeyword(keyword string) ([]*core.Tag, error) { + // TODO + debug.NotImplemented() + return nil, nil +} + +func (s *userManageServant) CreateUser(user *core.User) (*core.User, error) { + // TODO + debug.NotImplemented() + return nil, nil +} + +func (s *userManageServant) UpdateUser(user *core.User) error { + // TODO + debug.NotImplemented() + return nil +} + +func newUserManageService(db *pgx.Conn) core.UserManageService { + return &userManageServant{ + db: db, + q: dbr.New(db), + } +} diff --git a/internal/dao/slonik/wallet.go b/internal/dao/slonik/wallet.go new file mode 100644 index 00000000..4c7da5df --- /dev/null +++ b/internal/dao/slonik/wallet.go @@ -0,0 +1,63 @@ +// Copyright 2023 ROC. All rights reserved. +// Use of this source code is governed by a MIT style +// license that can be found in the LICENSE file. + +package slonik + +import ( + "github.com/jackc/pgx/v5" + "github.com/rocboss/paopao-ce/internal/core" + dbr "github.com/rocboss/paopao-ce/internal/dao/slonik/ce/postgres" + "github.com/rocboss/paopao-ce/pkg/debug" +) + +var ( + _ core.WalletService = (*walletServant)(nil) +) + +type walletServant struct { + db *pgx.Conn + q dbr.Querier +} + +func (s *walletServant) GetRechargeByID(id int64) (*core.WalletRecharge, error) { + // TODO + debug.NotImplemented() + return nil, nil +} +func (s *walletServant) CreateRecharge(userId, amount int64) (*core.WalletRecharge, error) { + // TODO + debug.NotImplemented() + return nil, nil +} + +func (s *walletServant) GetUserWalletBills(userID int64, offset, limit int) ([]*core.WalletStatement, error) { + // TODO + debug.NotImplemented() + return nil, nil +} + +func (s *walletServant) GetUserWalletBillCount(userID int64) (int64, error) { + // TODO + debug.NotImplemented() + return 0, nil +} + +func (s *walletServant) HandleRechargeSuccess(recharge *core.WalletRecharge, tradeNo string) error { + // TODO + debug.NotImplemented() + return nil +} + +func (s *walletServant) HandlePostAttachmentBought(post *core.Post, user *core.User) error { + // TODO + debug.NotImplemented() + return nil +} + +func newWalletService(db *pgx.Conn) core.WalletService { + return &walletServant{ + db: db, + q: dbr.New(db), + } +}