sqlc: prepare implement tweets data logic for sqlc feature

r/paopao-ce-pro
Michael Li 2 years ago
parent 9466d12412
commit 8578cd063b
No known key found for this signature in database

@ -18,3 +18,24 @@ type PTag struct {
// 是否删除 // 是否删除
IsDel bool IsDel bool
} }
// 用户
type PUser struct {
ID int64
Nickname string
Username string
Phone string
// MD5密码
Password string
Salt string
// 状态, 1正常, 2停用
Status int16
Avatar string
// 用户余额(分)
Balance int64
IsAdmin bool
CreatedOn int64
ModifiedOn int64
DeletedOn int64
IsDel bool
}

@ -1,14 +1,14 @@
-- name: NewestTags :many -- name: NewestTags :many
SELECT id, user_id, tag, quote_num SELECT t.id, t.tag, t.quote_num, u.id user_id, u.nickname, u.username, u.status, u.avatar, u.is_admin
FROM p_tag FROM p_tag t JOIN p_user u ON t.user_id = u.id
WHERE is_del = false AND quote_num > 0 WHERE t.is_del = 0 AND t.quote_num > 0
ORDER BY id DESC ORDER BY t.id DESC
OFFSET $1 LIMIT $2; OFFSET $1 LIMIT $2;
-- name: HotTags :many -- name: HotTags :many
SELECT id, user_id, tag, quote_num SELECT t.id, t.tag, t.quote_num, u.id user_id, u.nickname, u.username, u.status, u.avatar, u.is_admin
FROM p_tag FROM p_tag t JOIN p_user u ON t.user_id = u.id
WHERE is_del = false AND quote_num > 0 WHERE t.is_del = false AND t.quote_num > 0
ORDER BY quote_num DESC ORDER BY quote_num DESC
OFFSET $1 LIMIT $2; OFFSET $1 LIMIT $2;

@ -1,2 +1,5 @@
DROP TABLE IF EXISTS p_user;
DROP INDEX IF EXISTS p_user_username_idx, p_user_phone_idx;
DROP TABLE IF EXISTS p_tag; DROP TABLE IF EXISTS p_tag;
DROP INDEX IF EXISTS p_tag_tag_idx, p_tag_user_idx, p_tag_quote_num_idx; DROP INDEX IF EXISTS p_tag_tag_idx, p_tag_user_idx, p_tag_quote_num_idx;

@ -1,17 +1,42 @@
-- user ddl --
CREATE TABLE p_user (
id bigserial PRIMARY KEY,
nickname VARCHAR(32) NOT NULL DEFAULT '',
username VARCHAR(32) NOT NULL DEFAULT '',
phone VARCHAR(16) NOT NULL DEFAULT '',
PASSWORD VARCHAR(32) NOT NULL DEFAULT '',
salt VARCHAR(16) NOT NULL DEFAULT '',
status SMALLINT NOT NULL DEFAULT 1,
avatar VARCHAR(255) NOT NULL DEFAULT '',
balance BIGINT NOT NULL,
is_admin BOOLEAN NOT NULL DEFAULT FALSE,
created_on BIGINT NOT NULL,
modified_on BIGINT NOT NULL,
deleted_on BIGINT NOT NULL,
is_del BOOLEAN NOT NULL DEFAULT FALSE,
UNIQUE (username)
);
COMMENT ON TABLE p_user IS '用户';
COMMENT ON COLUMN p_user.password IS 'MD5密码';
COMMENT ON COLUMN p_user.status IS '状态, 1正常, 2停用';
COMMENT ON COLUMN p_user.balance IS '用户余额(分)';
CREATE UNIQUE INDEX p_user_username_idx ON p_user (username);
CREATE INDEX p_user_phone_idx ON p_user (phone);
-- tag ddl --
CREATE TABLE p_tag ( CREATE TABLE p_tag (
id bigserial PRIMARY KEY, id bigserial PRIMARY KEY,
user_id bigserial NOT NULL DEFAULT 0, user_id bigserial NOT NULL,
tag varchar(255) NOT NULL, tag VARCHAR(255) NOT NULL,
quote_num bigint NOT NULL DEFAULT 0, quote_num BIGINT NOT NULL DEFAULT 0,
created_on bigint NOT NULL DEFAULT 0, created_on BIGINT NOT NULL DEFAULT 0,
modified_on bigint NOT NULL DEFAULT 0, modified_on BIGINT NOT NULL DEFAULT 0,
deleted_on bigint NOT NULL DEFAULT 0, deleted_on BIGINT NOT NULL DEFAULT 0,
is_del boolean NOT NULL DEFAULT false, is_del BOOLEAN NOT NULL DEFAULT FALSE,
UNIQUE (tag) UNIQUE (tag)
); );
COMMENT ON TABLE p_tag IS '主题标签'; COMMENT ON TABLE p_tag IS '主题标签';
COMMENT ON COLUMN p_tag.is_del IS '是否删除'; COMMENT ON COLUMN p_tag.is_del IS '是否删除';
CREATE UNIQUE INDEX p_tag_tag_idx ON p_tag (tag); CREATE UNIQUE INDEX p_tag_tag_idx ON p_tag (tag);
CREATE INDEX p_tag_user_idx ON p_tag (user_id); CREATE INDEX p_tag_user_idx ON p_tag (user_id);
CREATE INDEX p_tag_quote_num_idx On p_tag (quote_num); CREATE INDEX p_tag_quote_num_idx ON p_tag (quote_num);

@ -33,9 +33,9 @@ func (q *Queries) DecrTagsById(ctx context.Context, arg *DecrTagsByIdParams) err
} }
const hotTags = `-- name: HotTags :many const hotTags = `-- name: HotTags :many
SELECT id, user_id, tag, quote_num SELECT t.id, t.tag, t.quote_num, u.id user_id, u.nickname, u.username, u.status, u.avatar, u.is_admin
FROM p_tag FROM p_tag t JOIN p_user u ON t.user_id = u.id
WHERE is_del = false AND quote_num > 0 WHERE t.is_del = false AND t.quote_num > 0
ORDER BY quote_num DESC ORDER BY quote_num DESC
OFFSET $1 LIMIT $2 OFFSET $1 LIMIT $2
` `
@ -47,9 +47,14 @@ type HotTagsParams struct {
type HotTagsRow struct { type HotTagsRow struct {
ID int64 ID int64
UserID int64
Tag string Tag string
QuoteNum int64 QuoteNum int64
UserID int64
Nickname string
Username string
Status int16
Avatar string
IsAdmin bool
} }
func (q *Queries) HotTags(ctx context.Context, arg *HotTagsParams) ([]*HotTagsRow, error) { func (q *Queries) HotTags(ctx context.Context, arg *HotTagsParams) ([]*HotTagsRow, error) {
@ -63,9 +68,14 @@ func (q *Queries) HotTags(ctx context.Context, arg *HotTagsParams) ([]*HotTagsRo
var i HotTagsRow var i HotTagsRow
if err := rows.Scan( if err := rows.Scan(
&i.ID, &i.ID,
&i.UserID,
&i.Tag, &i.Tag,
&i.QuoteNum, &i.QuoteNum,
&i.UserID,
&i.Nickname,
&i.Username,
&i.Status,
&i.Avatar,
&i.IsAdmin,
); err != nil { ); err != nil {
return nil, err return nil, err
} }
@ -147,10 +157,10 @@ func (q *Queries) InsertTags(ctx context.Context, arg *InsertTagsParams) (int64,
} }
const newestTags = `-- name: NewestTags :many const newestTags = `-- name: NewestTags :many
SELECT id, user_id, tag, quote_num SELECT t.id, t.tag, t.quote_num, u.id user_id, u.nickname, u.username, u.status, u.avatar, u.is_admin
FROM p_tag FROM p_tag t JOIN p_user u ON t.user_id = u.id
WHERE is_del = false AND quote_num > 0 WHERE t.is_del = 0 AND t.quote_num > 0
ORDER BY id DESC ORDER BY t.id DESC
OFFSET $1 LIMIT $2 OFFSET $1 LIMIT $2
` `
@ -161,9 +171,14 @@ type NewestTagsParams struct {
type NewestTagsRow struct { type NewestTagsRow struct {
ID int64 ID int64
UserID int64
Tag string Tag string
QuoteNum int64 QuoteNum int64
UserID int64
Nickname string
Username string
Status int16
Avatar string
IsAdmin bool
} }
func (q *Queries) NewestTags(ctx context.Context, arg *NewestTagsParams) ([]*NewestTagsRow, error) { func (q *Queries) NewestTags(ctx context.Context, arg *NewestTagsParams) ([]*NewestTagsRow, error) {
@ -177,9 +192,14 @@ func (q *Queries) NewestTags(ctx context.Context, arg *NewestTagsParams) ([]*New
var i NewestTagsRow var i NewestTagsRow
if err := rows.Scan( if err := rows.Scan(
&i.ID, &i.ID,
&i.UserID,
&i.Tag, &i.Tag,
&i.QuoteNum, &i.QuoteNum,
&i.UserID,
&i.Nickname,
&i.Username,
&i.Status,
&i.Avatar,
&i.IsAdmin,
); err != nil { ); err != nil {
return nil, err return nil, err
} }

@ -7,6 +7,7 @@ package slonik
import ( import (
"github.com/jackc/pgx/v5" "github.com/jackc/pgx/v5"
"github.com/rocboss/paopao-ce/internal/core" "github.com/rocboss/paopao-ce/internal/core"
"github.com/rocboss/paopao-ce/internal/core/cs"
"github.com/rocboss/paopao-ce/pkg/debug" "github.com/rocboss/paopao-ce/pkg/debug"
) )
@ -44,24 +45,44 @@ func (s *friendIndexServant) IndexPosts(user *core.User, offset int, limit int)
return nil, debug.ErrNotImplemented return nil, debug.ErrNotImplemented
} }
func (s *friendIndexServant) TweetTimeline(userId int64, offset int, limit int) (*cs.TweetBox, error) {
// TODO
return nil, debug.ErrNotImplemented
}
// IndexPosts 根据userId查询广场推文列表简单做到不同用户的主页都是不同的 // IndexPosts 根据userId查询广场推文列表简单做到不同用户的主页都是不同的
func (s *followIndexServant) IndexPosts(user *core.User, offset int, limit int) (*core.IndexTweetList, error) { func (s *followIndexServant) IndexPosts(user *core.User, offset int, limit int) (*core.IndexTweetList, error) {
// TODO // TODO
return nil, debug.ErrNotImplemented return nil, debug.ErrNotImplemented
} }
func (s *followIndexServant) TweetTimeline(userId int64, offset int, limit int) (*cs.TweetBox, error) {
// TODO
return nil, debug.ErrNotImplemented
}
// IndexPosts 根据userId查询广场推文列表简单做到不同用户的主页都是不同的 // IndexPosts 根据userId查询广场推文列表简单做到不同用户的主页都是不同的
func (s *lightIndexServant) IndexPosts(user *core.User, offset int, limit int) (*core.IndexTweetList, error) { func (s *lightIndexServant) IndexPosts(user *core.User, offset int, limit int) (*core.IndexTweetList, error) {
// TODO // TODO
return nil, debug.ErrNotImplemented return nil, debug.ErrNotImplemented
} }
func (s *lightIndexServant) TweetTimeline(userId int64, offset int, limit int) (*cs.TweetBox, error) {
// TODO
return nil, debug.ErrNotImplemented
}
// simpleCacheIndexGetPosts simpleCacheIndex 专属获取广场推文列表函数 // simpleCacheIndexGetPosts simpleCacheIndex 专属获取广场推文列表函数
func (s *simpleIndexPostsServant) IndexPosts(_user *core.User, offset int, limit int) (*core.IndexTweetList, error) { func (s *simpleIndexPostsServant) IndexPosts(_user *core.User, offset int, limit int) (*core.IndexTweetList, error) {
// TODO // TODO
return nil, debug.ErrNotImplemented return nil, debug.ErrNotImplemented
} }
func (s *simpleIndexPostsServant) TweetTimeline(userId int64, offset int, limit int) (*cs.TweetBox, error) {
// TODO
return nil, debug.ErrNotImplemented
}
func newFriendIndexService(db *pgx.Conn, ams core.AuthorizationManageService, ths core.TweetHelpService) core.IndexPostsService { func newFriendIndexService(db *pgx.Conn, ams core.AuthorizationManageService, ths core.TweetHelpService) core.IndexPostsService {
return &friendIndexServant{ return &friendIndexServant{
ams: ams, ams: ams,

@ -11,6 +11,7 @@ import (
"github.com/jackc/pgx/v5" "github.com/jackc/pgx/v5"
"github.com/rocboss/paopao-ce/internal/core" "github.com/rocboss/paopao-ce/internal/core"
"github.com/rocboss/paopao-ce/internal/core/cs"
dbr "github.com/rocboss/paopao-ce/internal/dao/slonik/ce/postgres" dbr "github.com/rocboss/paopao-ce/internal/dao/slonik/ce/postgres"
"github.com/rocboss/paopao-ce/pkg/types" "github.com/rocboss/paopao-ce/pkg/types"
) )
@ -25,7 +26,7 @@ type topicServant struct {
// UpsertTags update/insert tags info. // UpsertTags update/insert tags info.
// Assume tags slice is distinct elements. // Assume tags slice is distinct elements.
func (s *topicServant) UpsertTags(userId int64, tags []string) (res []*core.Tag, err error) { func (s *topicServant) UpsertTags(userId int64, tags []string) (res cs.TagInfoList, err error) {
err = s.with(func(c context.Context, q dbr.Querier) error { err = s.with(func(c context.Context, q dbr.Querier) error {
now := time.Now().Unix() now := time.Now().Unix()
upTags, err := q.IncrTags(c, &dbr.IncrTagsParams{ upTags, err := q.IncrTags(c, &dbr.IncrTagsParams{
@ -45,7 +46,7 @@ func (s *topicServant) UpsertTags(userId int64, tags []string) (res []*core.Tag,
break break
} }
} }
res = append(res, &core.Tag{ res = append(res, &cs.TagInfo{
ID: t.ID, ID: t.ID,
UserID: t.UserID, UserID: t.UserID,
Tag: t.Tag, Tag: t.Tag,
@ -62,7 +63,7 @@ func (s *topicServant) UpsertTags(userId int64, tags []string) (res []*core.Tag,
if err != nil { if err != nil {
return err return err
} }
res = append(res, &core.Tag{ res = append(res, &cs.TagInfo{
ID: id, ID: id,
UserID: userId, UserID: userId,
Tag: tag, Tag: tag,
@ -81,40 +82,56 @@ func (s *topicServant) DecrTagsById(ids []int64) error {
}) })
} }
func (s *topicServant) GetTags(category core.TagCategory, offset int, limit int) (res []*core.Tag, _ error) { func (s *topicServant) ListTags(typ cs.TagType, offset int, limit int) (res cs.TagList, _ error) {
ctx := context.Background() ctx := context.Background()
switch category { switch typ {
case core.TagCategoryHot: case cs.TagTypeHot:
tags, err := s.q.HotTags(ctx, &dbr.HotTagsParams{Offset: int32(offset), Limit: int32(limit)}) tags, err := s.q.HotTags(ctx, &dbr.HotTagsParams{Offset: int32(offset), Limit: int32(limit)})
if err != nil { if err != nil {
return nil, err return nil, err
} }
for _, tag := range tags { for _, tag := range tags {
res = append(res, &core.Tag{ res = append(res, &cs.TagItem{
ID: tag.ID, ID: tag.ID,
UserID: tag.UserID, UserID: tag.UserID,
Tag: tag.Tag, Tag: tag.Tag,
QuoteNum: tag.QuoteNum, QuoteNum: tag.QuoteNum,
User: &cs.UserInfo{
ID: tag.UserID,
Nickname: tag.Nickname,
Username: tag.Username,
Status: int(tag.Status),
Avatar: tag.Avatar,
IsAdmin: tag.IsAdmin,
},
}) })
} }
case core.TagCategoryNew: case cs.TagTypeNew:
tags, err := s.q.NewestTags(ctx, &dbr.NewestTagsParams{Offset: int32(offset), Limit: int32(limit)}) tags, err := s.q.NewestTags(ctx, &dbr.NewestTagsParams{Offset: int32(offset), Limit: int32(limit)})
if err != nil { if err != nil {
return nil, err return nil, err
} }
for _, tag := range tags { for _, tag := range tags {
res = append(res, &core.Tag{ res = append(res, &cs.TagItem{
ID: tag.ID, ID: tag.ID,
UserID: tag.UserID, UserID: tag.UserID,
Tag: tag.Tag, Tag: tag.Tag,
QuoteNum: tag.QuoteNum, QuoteNum: tag.QuoteNum,
User: &cs.UserInfo{
ID: tag.UserID,
Nickname: tag.Nickname,
Username: tag.Username,
Status: int(tag.Status),
Avatar: tag.Avatar,
IsAdmin: tag.IsAdmin,
},
}) })
} }
} }
return return
} }
func (s *topicServant) GetTagsByKeyword(keyword string) (res []*core.Tag, _ error) { func (s *topicServant) TagsByKeyword(keyword string) (res cs.TagInfoList, _ error) {
ctx := context.Background() ctx := context.Background()
keyword = "%" + strings.Trim(keyword, " ") + "%" keyword = "%" + strings.Trim(keyword, " ") + "%"
if keyword == "%%" { if keyword == "%%" {
@ -123,7 +140,7 @@ func (s *topicServant) GetTagsByKeyword(keyword string) (res []*core.Tag, _ erro
return nil, err return nil, err
} }
for _, tag := range tags { for _, tag := range tags {
res = append(res, &core.Tag{ res = append(res, &cs.TagInfo{
ID: tag.ID, ID: tag.ID,
UserID: tag.UserID, UserID: tag.UserID,
Tag: tag.Tag, Tag: tag.Tag,
@ -136,7 +153,7 @@ func (s *topicServant) GetTagsByKeyword(keyword string) (res []*core.Tag, _ erro
return nil, err return nil, err
} }
for _, tag := range tags { for _, tag := range tags {
res = append(res, &core.Tag{ res = append(res, &cs.TagInfo{
ID: tag.ID, ID: tag.ID,
UserID: tag.UserID, UserID: tag.UserID,
Tag: tag.Tag, Tag: tag.Tag,

@ -7,6 +7,7 @@ package slonik
import ( import (
"github.com/jackc/pgx/v5" "github.com/jackc/pgx/v5"
"github.com/rocboss/paopao-ce/internal/core" "github.com/rocboss/paopao-ce/internal/core"
"github.com/rocboss/paopao-ce/internal/core/cs"
"github.com/rocboss/paopao-ce/pkg/debug" "github.com/rocboss/paopao-ce/pkg/debug"
"gorm.io/gorm" "gorm.io/gorm"
) )
@ -43,6 +44,16 @@ func (s *tweetHelpServant) RevampPosts(posts []*core.PostFormated) ([]*core.Post
return nil, nil return nil, nil
} }
func (s *tweetHelpServant) RevampTweets(tweets cs.TweetList) (cs.TweetList, error) {
// TODO
return nil, debug.ErrNotImplemented
}
func (s *tweetHelpServant) MergeTweets(tweets cs.TweetInfo) (cs.TweetList, error) {
// TODO
return nil, debug.ErrNotImplemented
}
func (s *tweetHelpServant) getPostContentsByIDs(ids []int64) ([]*core.PostContent, error) { func (s *tweetHelpServant) getPostContentsByIDs(ids []int64) ([]*core.PostContent, error) {
// TODO // TODO
debug.NotImplemented() debug.NotImplemented()
@ -73,12 +84,6 @@ func (s *tweetManageServant) CreatePostContent(content *core.PostContent) (*core
return nil, nil 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) { func (s *tweetManageServant) CreatePost(post *core.Post) (*core.Post, error) {
// TODO // TODO
debug.NotImplemented() debug.NotImplemented()
@ -133,6 +138,56 @@ func (s *tweetManageServant) DeletePostStar(p *core.PostStar) error {
return nil return nil
} }
func (s *tweetManageServant) CreateAttachment(obj *cs.Attachment) (int64, error) {
// TODO
return 0, debug.ErrNotImplemented
}
func (s *tweetManageServant) CreateTweet(userId int64, req *cs.NewTweetReq) (*cs.TweetItem, error) {
// TODO
return nil, debug.ErrNotImplemented
}
func (s *tweetManageServant) DeleteTweet(userId int64, tweetId int64) ([]string, error) {
// TODO
return nil, debug.ErrNotImplemented
}
func (s *tweetManageServant) LockTweet(userId int64, tweetId int64) error {
// TODO
return debug.ErrNotImplemented
}
func (s *tweetManageServant) StickTweet(userId int64, tweetId int64) error {
// TODO
return debug.ErrNotImplemented
}
func (s *tweetManageServant) VisibleTweet(userId int64, visibility cs.TweetVisibleType) error {
// TODO
return debug.ErrNotImplemented
}
func (s *tweetManageServant) CreateReaction(userId int64, tweetId int64) error {
// TODO
return debug.ErrNotImplemented
}
func (s *tweetManageServant) DeleteReaction(userId int64, reactionId int64) error {
// TODO
return debug.ErrNotImplemented
}
func (s *tweetManageServant) CreateFavorite(userId int64, tweetId int64) error {
// TODO
return debug.ErrNotImplemented
}
func (s *tweetManageServant) DeleteFavorite(userId int64, favoriteId int64) error {
// TODO
return debug.ErrNotImplemented
}
func (s *tweetServant) GetPostByID(id int64) (*core.Post, error) { func (s *tweetServant) GetPostByID(id int64) (*core.Post, error) {
// TODO // TODO
debug.NotImplemented() debug.NotImplemented()
@ -217,6 +272,46 @@ func (s *tweetServant) GetPostContentByID(id int64) (*core.PostContent, error) {
return nil, nil return nil, nil
} }
func (s *tweetServant) TweetInfoById(id int64) (*cs.TweetInfo, error) {
// TODO
return nil, debug.ErrNotImplemented
}
func (s *tweetServant) TweetItemById(id int64) (*cs.TweetItem, error) {
// TODO
return nil, debug.ErrNotImplemented
}
func (s *tweetServant) UserTweets(visitorId, userId int64) (cs.TweetList, error) {
// TODO
return nil, debug.ErrNotImplemented
}
func (s *tweetServant) ReactionByTweetId(userId int64, tweetId int64) (*cs.ReactionItem, error) {
// TODO
return nil, debug.ErrNotImplemented
}
func (s *tweetServant) UserReactions(userId int64, offset int, limit int) (cs.ReactionList, error) {
// TODO
return nil, debug.ErrNotImplemented
}
func (s *tweetServant) FavoriteByTweetId(userId int64, tweetId int64) (*cs.FavoriteItem, error) {
// TODO
return nil, debug.ErrNotImplemented
}
func (s *tweetServant) UserFavorites(userId int64, offset int, limit int) (cs.FavoriteList, error) {
// TODO
return nil, debug.ErrNotImplemented
}
func (s *tweetServant) AttachmentByTweetId(userId int64, tweetId int64) (*cs.AttachmentBill, error) {
// TODO
return nil, debug.ErrNotImplemented
}
func newTweetService(db *pgx.Conn) core.TweetService { func newTweetService(db *pgx.Conn) core.TweetService {
return &tweetServant{ return &tweetServant{
pgxServant: newPgxServant(db), pgxServant: newPgxServant(db),

@ -48,12 +48,6 @@ func (s *userManageServant) GetUsersByKeyword(keyword string) ([]*core.User, err
return nil, nil 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) { func (s *userManageServant) CreateUser(user *core.User) (*core.User, error) {
// TODO // TODO
debug.NotImplemented() debug.NotImplemented()

Loading…
Cancel
Save