diff --git a/go.mod b/go.mod index c629b7a0..9d0f15a7 100644 --- a/go.mod +++ b/go.mod @@ -7,6 +7,7 @@ require ( github.com/afocus/captcha v0.0.0-20191010092841-4bd1f21c8868 github.com/alimy/cfg v0.3.0 github.com/alimy/mir/v3 v3.1.1 + github.com/alimy/yesql v0.2.0 github.com/aliyun/aliyun-oss-go-sdk v2.2.6+incompatible github.com/allegro/bigcache/v3 v3.0.2 github.com/bytedance/sonic v1.8.5 @@ -20,7 +21,7 @@ require ( github.com/golang-jwt/jwt/v4 v4.5.0 github.com/golang-migrate/migrate/v4 v4.15.2 github.com/huaweicloud/huaweicloud-sdk-go-obs v3.23.3+incompatible - github.com/jmoiron/sqlx v1.3.1 + github.com/jmoiron/sqlx v1.3.5 github.com/json-iterator/go v1.1.12 github.com/meilisearch/meilisearch-go v0.21.0 github.com/minio/minio-go/v7 v7.0.49 diff --git a/go.sum b/go.sum index cc46a9de..d874a4f0 100644 --- a/go.sum +++ b/go.sum @@ -127,6 +127,8 @@ github.com/alimy/cfg v0.3.0 h1:9xgA0QWVCPSq9fFNRcYahVCAX22IL9ts2wrTQPfAStY= github.com/alimy/cfg v0.3.0/go.mod h1:rOxbasTH2srl6StAjNF5Vyi8bfrdkl3fLGmOYtSw81c= github.com/alimy/mir/v3 v3.1.1 h1:3tz7uGOwuA1IKU0BysyBvGbyqKtEVMuhPBD/APk1ANw= github.com/alimy/mir/v3 v3.1.1/go.mod h1:ybhT2ijOiDn0lLwWzIY6vXdv+uzZrctS7VFfczcXBWU= +github.com/alimy/yesql v0.2.0 h1:tYDPxWSakSUOss1xcYisRjDH//GnUunvlrfB4Ek8ikQ= +github.com/alimy/yesql v0.2.0/go.mod h1:Y0FdRIwIbJyTv56wSX+MpaIHiAW1PyKTDYO6K/er4JY= github.com/aliyun/aliyun-oss-go-sdk v2.2.6+incompatible h1:KXeJoM1wo9I/6xPTyt6qCxoSZnmASiAjlrr0dyTUKt8= github.com/aliyun/aliyun-oss-go-sdk v2.2.6+incompatible/go.mod h1:T/Aws4fEfogEE9v+HPhhw+CntffsBHJ8nXQCwKr0/g8= github.com/allegro/bigcache/v3 v3.0.2 h1:AKZCw+5eAaVyNTBmI2fgyPVJhHkdWder3O9IrprcQfI= @@ -795,8 +797,9 @@ github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= -github.com/jmoiron/sqlx v1.3.1 h1:aLN7YINNZ7cYOPK3QC83dbM6KT0NMqVMw961TqrejlE= github.com/jmoiron/sqlx v1.3.1/go.mod h1:2BljVx/86SuTyjE+aPYlHCTNvZrnJXghYGpNiXLBMCQ= +github.com/jmoiron/sqlx v1.3.5 h1:vFFPA71p1o5gAeqtEAwLU4dnX2napprKtHr7PYIcN3g= +github.com/jmoiron/sqlx v1.3.5/go.mod h1:nRVWtLre0KfCLJvgxzCsLVMogSvQ1zNJtpYr2Ccp0mQ= github.com/joefitzgerald/rainbow-reporter v0.1.0/go.mod h1:481CNgqmVHQZzdIbN52CupLJyoVwB10FQ/IQlF1pdL8= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= diff --git a/internal/dao/sakila/authority.go b/internal/dao/sakila/authority.go index 2811ddd9..2b77e1ef 100644 --- a/internal/dao/sakila/authority.go +++ b/internal/dao/sakila/authority.go @@ -53,7 +53,7 @@ func (s *authorizationManageSrv) isFriend(userId int64, friendId int64) bool { func newAuthorizationManageService(db *sqlx.DB) core.AuthorizationManageService { return &authorizationManageSrv{ sqlxSrv: newSqlxSrv(db), - stmtIdx: c(`SELECT * FROM @person WHERE first_name=?`), - stmtUpdateFriend: c(`SELECT * FROM @person WHERE first_name=?`), + stmtIdx: c(`SELECT * FROM @user WHERE username=?`), + stmtUpdateFriend: c(`SELECT * FROM @user WHERE username=?`), } } diff --git a/internal/dao/sakila/comments.go b/internal/dao/sakila/comments.go index b15d0135..0556541f 100644 --- a/internal/dao/sakila/comments.go +++ b/internal/dao/sakila/comments.go @@ -96,15 +96,15 @@ func (s *commentManageSrv) CreateCommentContent(content *core.CommentContent) (* func newCommentService(db *sqlx.DB) core.CommentService { return &commentSrv{ sqlxSrv: newSqlxSrv(db), - stmtGetComments: c(`SELECT * FROM @person WHERE first_name=?`), - stmtGetReply: c(`SELECT * FROM @person WHERE first_name=?`), + stmtGetComments: c(`SELECT * FROM @user WHERE username=?`), + stmtGetReply: c(`SELECT * FROM @user WHERE username=?`), } } func newCommentManageService(db *sqlx.DB) core.CommentManageService { return &commentManageSrv{ sqlxSrv: newSqlxSrv(db), - stmtAddComents: c(`SELECT * FROM @person WHERE first_name=?`), - stmtDelComments: c(`SELECT * FROM @person WHERE first_name=?`), + stmtAddComents: c(`SELECT * FROM @user WHERE username=?`), + stmtDelComments: c(`SELECT * FROM @user WHERE username=?`), } } diff --git a/internal/dao/sakila/contacts.go b/internal/dao/sakila/contacts.go index 673e527e..bf48654c 100644 --- a/internal/dao/sakila/contacts.go +++ b/internal/dao/sakila/contacts.go @@ -59,7 +59,7 @@ func (s *contactManageSrv) IsFriend(userId int64, friendId int64) bool { func newContactManageService(db *sqlx.DB) core.ContactManageService { return &contactManageSrv{ sqlxSrv: newSqlxSrv(db), - stmtAddFriend: c(`SELECT * FROM @person WHERE first_name=?`), - stmtDelFriend: c(`SELECT * FROM @person WHERE first_name=?`), + stmtAddFriend: c(`SELECT * FROM @user WHERE username=?`), + stmtDelFriend: c(`SELECT * FROM @user WHERE username=?`), } } diff --git a/internal/dao/sakila/messages.go b/internal/dao/sakila/messages.go index c4663737..71806014 100644 --- a/internal/dao/sakila/messages.go +++ b/internal/dao/sakila/messages.go @@ -60,8 +60,8 @@ func (s *messageSrv) GetMessageCount(conditions *core.ConditionsT) (int64, error func newMessageService(db *sqlx.DB) core.MessageService { return &messageSrv{ sqlxSrv: newSqlxSrv(db), - stmtAddMsg: c(`SELECT * FROM @person WHERE first_name=?`), - stmtGetMsg: c(`SELECT * FROM @person WHERE first_name=?`), - stmtReadMsg: c(`SELECT * FROM @person WHERE first_name=?`), + stmtAddMsg: c(`SELECT * FROM @user WHERE username=?`), + stmtGetMsg: c(`SELECT * FROM @user WHERE username=?`), + stmtReadMsg: c(`SELECT * FROM @user WHERE username=?`), } } diff --git a/internal/dao/sakila/sakila.go b/internal/dao/sakila/sakila.go index bc24ef93..6216c592 100644 --- a/internal/dao/sakila/sakila.go +++ b/internal/dao/sakila/sakila.go @@ -9,6 +9,7 @@ import ( "github.com/Masterminds/semver/v3" "github.com/alimy/cfg" + "github.com/alimy/yesql" "github.com/rocboss/paopao-ce/internal/core" "github.com/rocboss/paopao-ce/internal/dao/cache" "github.com/rocboss/paopao-ce/internal/dao/security" @@ -19,6 +20,9 @@ var ( _ core.DataService = (*dataSrv)(nil) _ core.VersionInfo = (*dataSrv)(nil) + _ core.WebDataServantA = (*webDataSrvA)(nil) + _ core.VersionInfo = (*webDataSrvA)(nil) + _onceInitial sync.Once ) @@ -38,6 +42,13 @@ type dataSrv struct { core.AttachmentCheckService } +type webDataSrvA struct { + core.TopicServantA + core.TweetServantA + core.TweetManageServantA + core.TweetHelpServantA +} + func NewDataService() (core.DataService, core.VersionInfo) { lazyInitial() @@ -75,11 +86,12 @@ func NewDataService() (core.DataService, core.VersionInfo) { } logrus.Infof("use %s as cache index service by version: %s", v.Name(), v.Version()) + query := yesql.MustParseBytes(yesqlBytes) ds := &dataSrv{ IndexPostsService: cis, WalletService: newWalletService(_db), MessageService: newMessageService(_db), - TopicService: newTopicService(_db), + TopicService: newTopicService(_db, query), TweetService: newTweetService(_db), TweetManageService: newTweetManageService(_db, cis), TweetHelpService: newTweetHelpService(_db), @@ -94,8 +106,10 @@ func NewDataService() (core.DataService, core.VersionInfo) { } func NewWebDataServantA() (core.WebDataServantA, core.VersionInfo) { - logrus.Fatal("not support now") - return nil, nil + lazyInitial() + // db := conf.MustSqlxDB() + ds := &webDataSrvA{} + return ds, ds } func NewAuthorizationManageService() core.AuthorizationManageService { @@ -111,6 +125,14 @@ func (s *dataSrv) Version() *semver.Version { return semver.MustParse("v0.1.0") } +func (s *webDataSrvA) Name() string { + return "Sqlx" +} + +func (s *webDataSrvA) Version() *semver.Version { + return semver.MustParse("v0.0.0") +} + // lazyInitial do some package lazy initialize for performance func lazyInitial() { _onceInitial.Do(func() { diff --git a/internal/dao/sakila/security.go b/internal/dao/sakila/security.go index e4bd1f86..be27849e 100644 --- a/internal/dao/sakila/security.go +++ b/internal/dao/sakila/security.go @@ -46,7 +46,7 @@ func newSecurityService(db *sqlx.DB, phoneVerify core.PhoneVerifyService) core.S return &securitySrv{ sqlxSrv: newSqlxSrv(db), phoneVerify: phoneVerify, - stmtAddCaptcha: c(`SELECT * FROM @person WHERE first_name=?`), - stmtGetCaptcha: c(`SELECT * FROM @person WHERE first_name=?`), + stmtAddCaptcha: c(`SELECT * FROM @user WHERE username=?`), + stmtGetCaptcha: c(`SELECT * FROM @user WHERE username=?`), } } diff --git a/internal/dao/sakila/sqlx.go b/internal/dao/sakila/sqlx.go index 3b3be210..503b435e 100644 --- a/internal/dao/sakila/sqlx.go +++ b/internal/dao/sakila/sqlx.go @@ -7,13 +7,18 @@ package sakila import ( "context" "database/sql" + _ "embed" "strings" + "github.com/alimy/yesql" "github.com/jmoiron/sqlx" "github.com/rocboss/paopao-ce/internal/conf" "github.com/sirupsen/logrus" ) +//go:embed yesql.sql +var yesqlBytes []byte + var ( _db *sqlx.DB ) @@ -89,7 +94,8 @@ func r(query string) string { } func c(query string) *sqlx.Stmt { - stmt, err := _db.Preparex(_db.Rebind(t(query))) + query = _db.Rebind(t(query)) + stmt, err := _db.Preparex(query) if err != nil { logrus.Fatalf("prepare query(%s) error: %s", query, err) } @@ -97,7 +103,8 @@ func c(query string) *sqlx.Stmt { } func n(query string) *sqlx.NamedStmt { - stmt, err := _db.PrepareNamed(t(query)) + query = t(query) + stmt, err := _db.PrepareNamed(query) if err != nil { logrus.Fatalf("prepare named query(%s) error: %s", query, err) } @@ -111,4 +118,16 @@ func t(query string) string { func initSqlxDB() { _db = conf.MustSqlxDB() + yesql.UseSqlx(_db) + yesql.SetDefaultQueryHooks(func(query *yesql.Query) (*yesql.Query, error) { + qstr := strings.TrimRight(query.Query, ";") + // table name fixed + qstr = strings.Replace(qstr, "@", conf.DatabaseSetting.TablePrefix, -1) + // rebind query + if clause, exist := query.Tags["clause"]; !exist || clause != "in" { + qstr = _db.Rebind(qstr) + } + query.Query = qstr + return query, nil + }) } diff --git a/internal/dao/sakila/timeline.go b/internal/dao/sakila/timeline.go index 5bc8485b..f6717a9e 100644 --- a/internal/dao/sakila/timeline.go +++ b/internal/dao/sakila/timeline.go @@ -91,7 +91,7 @@ func newFriendIndexService(db *sqlx.DB, ams core.AuthorizationManageService, ths return &friendIndexSrv{ ams: ams, sqlxSrv: newSqlxSrv(db), - stmtIndex: c(`SELECT * FROM @person WHERE first_name=?`), + stmtIndex: c(`SELECT * FROM @user WHERE username=?`), } } @@ -99,7 +99,7 @@ func newFollowIndexService(db *sqlx.DB, ths core.TweetHelpService) core.IndexPos return &followIndexSrv{ ths: ths, sqlxSrv: newSqlxSrv(db), - stmtIndex: c(`SELECT * FROM @person WHERE first_name=?`), + stmtIndex: c(`SELECT * FROM @user WHERE username=?`), } } @@ -107,7 +107,7 @@ func newLightIndexService(db *sqlx.DB, ths core.TweetHelpService) core.IndexPost return &lightIndexSrv{ ths: ths, sqlxSrv: newSqlxSrv(db), - stmtIndex: c(`SELECT * FROM @person WHERE first_name=?`), + stmtIndex: c(`SELECT * FROM @user WHERE username=?`), } } @@ -115,6 +115,6 @@ func newSimpleIndexPostsService(db *sqlx.DB, ths core.TweetHelpService) core.Ind return &simpleIndexPostsSrv{ ths: ths, sqlxSrv: newSqlxSrv(db), - stmtIndex: c(`SELECT * FROM @person WHERE first_name=?`), + stmtIndex: c(`SELECT * FROM @user WHERE username=?`), } } diff --git a/internal/dao/sakila/topics.go b/internal/dao/sakila/topics.go index 815d88cd..2ee51bca 100644 --- a/internal/dao/sakila/topics.go +++ b/internal/dao/sakila/topics.go @@ -8,9 +8,11 @@ import ( "strings" "time" + "github.com/alimy/yesql" "github.com/jmoiron/sqlx" "github.com/rocboss/paopao-ce/internal/core" "github.com/rocboss/paopao-ce/internal/core/cs" + "github.com/sirupsen/logrus" ) var ( @@ -19,16 +21,17 @@ var ( type topicSrv struct { *sqlxSrv - stmtNewestTags *sqlx.Stmt - stmtHotTags *sqlx.Stmt - stmtTagsByKeywordA *sqlx.Stmt - stmtTagsByKeywordB *sqlx.Stmt - stmtInsertTag *sqlx.Stmt - sqlTagsByIdA string - sqlTagsByIdB string - sqlDecrTagsById string - sqlTagsForIncr string - sqlIncrTagsById string + Scope yesql.Scope `yesql:"topic"` + StmtNewestTags *sqlx.Stmt `yesql:"newest_tags"` + StmtHotTags *sqlx.Stmt `yesql:"hot_tags"` + StmtTagsByKeywordA *sqlx.Stmt `yesql:"tags_by_keyword_a"` + StmtTagsByKeywordB *sqlx.Stmt `yesql:"tags_by_keyword_b"` + StmtInsertTag *sqlx.Stmt `yesql:"insert_tag"` + SqlTagsByIdA string `yesql:"tags_by_id_a"` + SqlTagsByIdB string `yesql:"tags_by_id_b"` + SqlDecrTagsById string `yesql:"decr_tags_by_id"` + SqlTagsForIncr string `yesql:"tags_for_incr"` + SqlIncrTagsById string `yesql:"incr_tags_by_id"` } func (s *topicSrv) UpsertTags(userId int64, tags []string) (res cs.TagInfoList, xerr error) { @@ -37,7 +40,7 @@ func (s *topicSrv) UpsertTags(userId int64, tags []string) (res cs.TagInfoList, } xerr = s.with(func(tx *sqlx.Tx) error { var upTags cs.TagInfoList - if err := s.inSelect(tx, &upTags, s.sqlTagsForIncr, tags); err != nil { + if err := s.inSelect(tx, &upTags, s.SqlTagsForIncr, tags); err != nil { return err } now := time.Now().Unix() @@ -57,7 +60,7 @@ func (s *topicSrv) UpsertTags(userId int64, tags []string) (res cs.TagInfoList, } } } - if _, err := s.inExec(tx, s.sqlIncrTagsById, now, ids); err != nil { + if _, err := s.inExec(tx, s.SqlIncrTagsById, now, ids); err != nil { return err } res = append(res, upTags...) @@ -68,7 +71,7 @@ func (s *topicSrv) UpsertTags(userId int64, tags []string) (res cs.TagInfoList, } var ids []int64 for _, tag := range tags { - res, err := s.stmtInsertTag.Exec(userId, tag, now, now) + res, err := s.StmtInsertTag.Exec(userId, tag, now, now) if err != nil { return err } @@ -79,7 +82,7 @@ func (s *topicSrv) UpsertTags(userId int64, tags []string) (res cs.TagInfoList, ids = append(ids, id) } var newTags cs.TagInfoList - if err := s.inSelect(tx, &newTags, s.sqlTagsByIdB, ids); err != nil { + if err := s.inSelect(tx, &newTags, s.SqlTagsByIdB, ids); err != nil { return err } res = append(res, newTags...) @@ -91,11 +94,11 @@ func (s *topicSrv) UpsertTags(userId int64, tags []string) (res cs.TagInfoList, func (s *topicSrv) DecrTagsById(ids []int64) error { return s.with(func(tx *sqlx.Tx) error { var ids []int64 - err := s.inSelect(tx, &ids, s.sqlTagsByIdA, ids) + err := s.inSelect(tx, &ids, s.SqlTagsByIdA, ids) if err != nil { return err } - _, err = s.inExec(tx, s.sqlDecrTagsById, time.Now().Unix(), ids) + _, err = s.inExec(tx, s.SqlDecrTagsById, time.Now().Unix(), ids) return err }) } @@ -103,9 +106,9 @@ func (s *topicSrv) DecrTagsById(ids []int64) error { func (s *topicSrv) ListTags(typ cs.TagType, limit int, offset int) (res cs.TagList, err error) { switch typ { case cs.TagTypeHot: - err = s.stmtHotTags.Select(&res, limit, offset) + err = s.StmtHotTags.Select(&res, limit, offset) case cs.TagTypeNew: - err = s.stmtNewestTags.Select(&res, limit, offset) + err = s.StmtNewestTags.Select(&res, limit, offset) } return } @@ -113,25 +116,19 @@ func (s *topicSrv) ListTags(typ cs.TagType, limit int, offset int) (res cs.TagLi func (s *topicSrv) TagsByKeyword(keyword string) (res cs.TagInfoList, err error) { keyword = "%" + strings.Trim(keyword, " ") + "%" if keyword == "%%" { - err = s.stmtTagsByKeywordA.Select(&res) + err = s.StmtTagsByKeywordA.Select(&res) } else { - err = s.stmtTagsByKeywordB.Select(&res) + err = s.StmtTagsByKeywordB.Select(&res) } return } -func newTopicService(db *sqlx.DB) core.TopicService { - return &topicSrv{ - sqlxSrv: newSqlxSrv(db), - stmtNewestTags: c(`SELECT t.id id, t.user_id user_id, t.tag tag, t.quote_num quote_num, u.id, u.nickname, u.username, u.status, u.avatar, u.is_admin FROM @tag t JOIN @user u ON t.user_id = u.id WHERE t.is_del = 0 AND t.quote_num > 0 ORDER BY t.id DESC LIMIT ? OFFSET ?`), - stmtHotTags: c(`SELECT t.id id, t.user_id user_id, t.tag tag, t.quote_num quote_num, u.id, u.nickname, u.username, u.status, u.avatar, u.is_admin FROM @tag t JOIN @user u ON t.user_id = u.id WHERE t.is_del = 0 AND t.quote_num > 0 ORDER BY t.quote_num DESC LIMIT ? OFFSET ?`), - stmtTagsByKeywordA: c(`SELECT id, user_id, tag, quote_num FROM @tag WHERE is_del = 0 ORDER BY quote_num DESC LIMIT 6`), - stmtTagsByKeywordB: c(`SELECT id, user_id, tag, quote_num FROM @tag WHERE is_del = 0 AND tag LIKE ? ORDER BY quote_num DESC LIMIT 6`), - stmtInsertTag: c(`INSERT INTO @tag (user_id, tag, created_on, modified_on, quote_num) VALUES (?, ?, ?, ?, 1)`), - sqlTagsByIdA: t(`SELECT id FROM @tag WHERE id IN (?) AND is_del = 0 AND quote_num > 0`), - sqlTagsByIdB: t(`SELECT id, user_id, tag, quote_num FROM @tag WHERE id IN (?)`), - sqlDecrTagsById: t(`UPDATE @tag SET quote_num=quote_num-1, modified_on=? WHERE id IN (?)`), - sqlTagsForIncr: t(`SELECT id, user_id, tag, quote_num FROM @tag WHERE tag IN (?)`), - sqlIncrTagsById: t(`UPDATE @tag SET quote_num=quote_num+1, is_del=0, modified_on=? WHERE id IN (?)`), +func newTopicService(db *sqlx.DB, query yesql.SQLQuery) core.TopicService { + obj := &topicSrv{ + sqlxSrv: newSqlxSrv(db), } + if err := yesql.Scan(obj, query); err != nil { + logrus.Fatal(err) + } + return obj } diff --git a/internal/dao/sakila/tweets.go b/internal/dao/sakila/tweets.go index 3802cac7..fc7e88cd 100644 --- a/internal/dao/sakila/tweets.go +++ b/internal/dao/sakila/tweets.go @@ -326,9 +326,9 @@ func (s *tweetSrv) AttachmentByTweetId(userId int64, tweetId int64) (*cs.Attachm func newTweetService(db *sqlx.DB) core.TweetService { return &tweetSrv{ sqlxSrv: newSqlxSrv(db), - stmtGetTweet: c(`SELECT * FROM @person WHERE first_name=?`), - stmtListTweet: c(`SELECT * FROM @person WHERE first_name=?`), - stmtListStar: c(`SELECT * FROM @person WHERE first_name=?`), + stmtGetTweet: c(`SELECT * FROM @user WHERE username=?`), + stmtListTweet: c(`SELECT * FROM @user WHERE username=?`), + stmtListStar: c(`SELECT * FROM @user WHERE username=?`), } } @@ -336,17 +336,17 @@ func newTweetManageService(db *sqlx.DB, cacheIndex core.CacheIndexService) core. return &tweetManageSrv{ sqlxSrv: newSqlxSrv(db), cacheIndex: cacheIndex, - stmtAddTweet: c(`SELECT * FROM @person WHERE first_name=?`), - stmtDelTweet: c(`SELECT * FROM @person WHERE first_name=?`), - stmtStickTweet: c(`SELECT * FROM @person WHERE first_name=?`), + stmtAddTweet: c(`SELECT * FROM @user WHERE username=?`), + stmtDelTweet: c(`SELECT * FROM @user WHERE username=?`), + stmtStickTweet: c(`SELECT * FROM @user WHERE username=?`), } } func newTweetHelpService(db *sqlx.DB) core.TweetHelpService { return &tweetHelpSrv{ sqlxSrv: newSqlxSrv(db), - stmtAddTag: c(`SELECT * FROM @person WHERE first_name=?`), - stmtDelTag: c(`SELECT * FROM @person WHERE first_name=?`), - stmtListTag: c(`SELECT * FROM @person WHERE first_name=?`), + stmtAddTag: c(`SELECT * FROM @user WHERE username=?`), + stmtDelTag: c(`SELECT * FROM @user WHERE username=?`), + stmtListTag: c(`SELECT * FROM @user WHERE username=?`), } } diff --git a/internal/dao/sakila/user.go b/internal/dao/sakila/user.go index b0709abf..6d058ad8 100644 --- a/internal/dao/sakila/user.go +++ b/internal/dao/sakila/user.go @@ -66,8 +66,8 @@ func (s *userManageSrv) UpdateUser(user *core.User) error { func newUserManageService(db *sqlx.DB) core.UserManageService { return &userManageSrv{ sqlxSrv: newSqlxSrv(db), - stmtAddUser: c(`SELECT * FROM @person WHERE first_name=?`), - stmtUpdateUser: c(`SELECT * FROM @person WHERE first_name=?`), - stmtGetUser: c(`SELECT * FROM @person WHERE first_name=?`), + stmtAddUser: c(`SELECT * FROM @user WHERE username=?`), + stmtUpdateUser: c(`SELECT * FROM @user WHERE username=?`), + stmtGetUser: c(`SELECT * FROM @user WHERE username=?`), } } diff --git a/internal/dao/sakila/wallet.go b/internal/dao/sakila/wallet.go index 6a48b1e1..6775d084 100644 --- a/internal/dao/sakila/wallet.go +++ b/internal/dao/sakila/wallet.go @@ -59,8 +59,8 @@ func (s *walletSrv) HandlePostAttachmentBought(post *core.Post, user *core.User) func newWalletService(db *sqlx.DB) core.WalletService { return &walletSrv{ sqlxSrv: newSqlxSrv(db), - stmtAddRecharge: c(`SELECT * FROM @person WHERE first_name=?`), - stmtGetRecharge: c(`SELECT * FROM @person WHERE first_name=?`), - stmtGetBills: c(`SELECT * FROM @person WHERE first_name=?`), + stmtAddRecharge: c(`SELECT * FROM @user WHERE username=?`), + stmtGetRecharge: c(`SELECT * FROM @user WHERE username=?`), + stmtGetBills: c(`SELECT * FROM @user WHERE username=?`), } } diff --git a/internal/dao/sakila/yesql.sql b/internal/dao/sakila/yesql.sql new file mode 100644 index 00000000..cd8f9097 --- /dev/null +++ b/internal/dao/sakila/yesql.sql @@ -0,0 +1,50 @@ + +-- name: newest_tags@topic +-- get newest tag information +SELECT t.id id, t.user_id user_id, t.tag tag, t.quote_num quote_num, u.id, u.nickname, u.username, u.status, u.avatar, u.is_admin +FROM @tag t +JOIN @user u +ON t.user_id = u.id +WHERE t.is_del = 0 AND t.quote_num > 0 +ORDER BY t.id DESC +LIMIT ? OFFSET ?; + +-- name: hot_tags@topic +-- get get host tag information +SELECT t.id id, t.user_id user_id, t.tag tag, t.quote_num quote_num, u.id, u.nickname, u.username, u.status, u.avatar, u.is_admin +FROM @tag t +JOIN @user u +ON t.user_id = u.id +WHERE t.is_del = 0 AND t.quote_num > 0 +ORDER BY t.quote_num DESC +LIMIT ? OFFSET ?; + +-- name: tags_by_keyword_a@topic +-- get tags by keyword +SELECT id, user_id, tag, quote_num FROM @tag WHERE is_del = 0 ORDER BY quote_num DESC LIMIT 6; + +-- name: tags_by_keyword_b@topic +SELECT id, user_id, tag, quote_num FROM @tag WHERE is_del = 0 AND tag LIKE ? ORDER BY quote_num DESC LIMIT 6; + +-- name: insert_tag@topic +INSERT INTO @tag (user_id, tag, created_on, modified_on, quote_num) VALUES (?, ?, ?, ?, 1); + +-- name: tags_by_id_a@topic +-- clause: in +SELECT id FROM @tag WHERE id IN (?) AND is_del = 0 AND quote_num > 0; + +-- name: tags_by_id_b@topic +-- clause: in +SELECT id, user_id, tag, quote_num FROM @tag WHERE id IN (?); + +-- name: decr_tags_by_id@topic +-- clause: in +UPDATE @tag SET quote_num=quote_num-1, modified_on=? WHERE id IN (?); + +-- name: tags_for_incr@topic +-- clause: in +SELECT id, user_id, tag, quote_num FROM @tag WHERE tag IN (?); + +-- name: incr_tags_by_id@topic +-- clause: in +UPDATE @tag SET quote_num=quote_num+1, is_del=0, modified_on=? WHERE id IN (?);