Merge branch 'r/paopao-ce-plus' into r/paopao-ce-xtra

r/paopao-ce-xtra
Michael Li 2 years ago
commit 71c7f2ee2a
No known key found for this signature in database

@ -0,0 +1,65 @@
// Code generated by Yesql. DO NOT EDIT.
// versions:
// - Yesql v1.8.5
package pg
import (
"context"
"fmt"
"github.com/alimy/yesql"
"github.com/bitbus/sqlx"
)
var (
_ = fmt.Errorf("error for placeholder")
)
const (
_TweetManage_AddPost = `INSERT INTO @post (user_id, tags, ip, ip_loc, attachment_price, visibility, latest_replied_on, created_on) VALUES (:user_id, :tags, :ip, :ip_loc, :attachment_price, :visibility, :latest_replied_on, :created_on) RETURNING id`
_TweetManage_AddPostContent = `INSERT INTO @post_content (post_id, user_id, content, type, sort, created_on) VALUES (:post_id, :user_id, :content, :type, :sort, :created_on) RETURNING id`
)
// PreparexContext enhances the Conn interface with context.
type PreparexContext interface {
// PrepareContext prepares a statement.
// The provided context is used for the preparation of the statement, not for
// the execution of the statement.
PreparexContext(ctx context.Context, query string) (*sqlx.Stmt, error)
// PrepareNamedContext returns an sqlx.NamedStmt
PrepareNamedContext(ctx context.Context, query string) (*sqlx.NamedStmt, error)
// Rebind rebind query to adapte SQL Driver
Rebind(query string) string
}
// PreparexBuilder preparex builder interface for sqlx
type PreparexBuilder interface {
PreparexContext
QueryHook(query string) string
}
type TweetManage struct {
yesql.Namespace `yesql:"tweet_manage"`
AddPost *sqlx.NamedStmt `yesql:"add_post"`
AddPostContent *sqlx.NamedStmt `yesql:"add_post_content"`
}
func BuildTweetManage(p PreparexBuilder, ctx ...context.Context) (obj *TweetManage, err error) {
var c context.Context
if len(ctx) > 0 && ctx[0] != nil {
c = ctx[0]
} else {
c = context.Background()
}
obj = &TweetManage{}
if obj.AddPost, err = p.PrepareNamedContext(c, p.Rebind(p.QueryHook(_TweetManage_AddPost))); err != nil {
return nil, fmt.Errorf("prepare _TweetManage_AddPost error: %w", err)
}
if obj.AddPostContent, err = p.PrepareNamedContext(c, p.Rebind(p.QueryHook(_TweetManage_AddPostContent))); err != nil {
return nil, fmt.Errorf("prepare _TweetManage_AddPostContent error: %w", err)
}
return
}

@ -14,6 +14,7 @@ import (
yc "github.com/rocboss/paopao-ce/internal/dao/sakila/auto"
"github.com/rocboss/paopao-ce/internal/dao/sakila/auto/ac"
"github.com/rocboss/paopao-ce/internal/dao/sakila/auto/cc"
"github.com/rocboss/paopao-ce/internal/dao/sakila/auto/pg"
"github.com/sirupsen/logrus"
)
@ -103,6 +104,7 @@ func mustBuild[T any](db *sqlx.DB, fn func(yc.PreparexBuilder, ...context.Contex
return obj
}
//lint:ignore U1000 mustBuildFn
func mustBuildFn[T any](db *sqlx.DB, fn func(yc.PreparexBuilder) (T, error)) T {
p := yesql.NewPreparexBuilder(db, t)
obj, err := fn(p)
@ -148,6 +150,26 @@ func ccBuildFn[T any](db *sqlx.DB, fn func(cc.PreparexBuilder) (T, error)) T {
return obj
}
//lint:ignore U1000 pgBuild
func pgBuild[T any](db *sqlx.DB, fn func(pg.PreparexBuilder, ...context.Context) (T, error)) T {
p := yesql.NewPreparexBuilder(db, t)
obj, err := fn(p)
if err != nil {
logrus.Fatalf("build object failure: %s", err)
}
return obj
}
//lint:ignore U1000 pgBuildFn
func pgBuildFn[T any](db *sqlx.DB, fn func(pg.PreparexBuilder) (T, error)) T {
p := yesql.NewPreparexBuilder(db, t)
obj, err := fn(p)
if err != nil {
logrus.Fatalf("build object failure: %s", err)
}
return obj
}
func initSqlxDB() {
_db = conf.MustSqlxDB()
_tablePrefix = conf.DatabaseSetting.TablePrefix

@ -8,12 +8,14 @@ import (
"strings"
"time"
"github.com/alimy/cfg"
"github.com/bitbus/sqlx"
"github.com/rocboss/paopao-ce/internal/core"
"github.com/rocboss/paopao-ce/internal/core/cs"
"github.com/rocboss/paopao-ce/internal/core/ms"
"github.com/rocboss/paopao-ce/internal/dao/jinzhu/dbr"
"github.com/rocboss/paopao-ce/internal/dao/sakila/auto/cc"
"github.com/rocboss/paopao-ce/internal/dao/sakila/auto/pg"
)
var (
@ -477,12 +479,20 @@ func newTweetService(db *sqlx.DB) core.TweetService {
}
}
func newTweetManageService(db *sqlx.DB, cacheIndex core.CacheIndexService) core.TweetManageService {
return &tweetManageSrv{
func newTweetManageService(db *sqlx.DB, cacheIndex core.CacheIndexService) (s core.TweetManageService) {
tms := &tweetManageSrv{
sqlxSrv: newSqlxSrv(db),
cis: cacheIndex,
q: ccBuild(db, cc.BuildTweetManage),
}
s = tms
if cfg.Any("PostgreSQL", "PgSQL", "Postgres") {
s = &pgTweetManageSrv{
tweetManageSrv: tms,
p: pgBuild(db, pg.BuildTweetManage),
}
}
return
}
func newTweetHelpService(db *sqlx.DB) core.TweetHelpService {

@ -0,0 +1,44 @@
// 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 sakila
import (
"time"
"github.com/rocboss/paopao-ce/internal/core"
"github.com/rocboss/paopao-ce/internal/core/ms"
"github.com/rocboss/paopao-ce/internal/dao/jinzhu/dbr"
"github.com/rocboss/paopao-ce/internal/dao/sakila/auto/pg"
)
var (
_ core.TweetManageService = (*pgTweetManageSrv)(nil)
)
type pgTweetManageSrv struct {
*tweetManageSrv
p *pg.TweetManage
}
func (s *pgTweetManageSrv) CreatePost(r *ms.Post) (*ms.Post, error) {
now := time.Now().Unix()
r.Model = &dbr.Model{CreatedOn: now}
r.LatestRepliedOn = now
err := s.p.AddPost.Get(&r.ID, r)
if err != nil {
return nil, err
}
s.cis.SendAction(core.IdxActCreatePost, r)
return r, nil
}
func (s *pgTweetManageSrv) CreatePostContent(r *ms.PostContent) (*ms.PostContent, error) {
r.Model = &ms.Model{CreatedOn: time.Now().Unix()}
err := s.p.AddPostContent.Get(&r.ID, r)
if err != nil {
return nil, err
}
return r, nil
}

@ -26,6 +26,7 @@ func main() {
yesql.NewSqlInfo("yesql.sql", "../auto", "yesql"),
yesql.NewSqlInfo("yesql_ac.sql", "../auto/ac", "ac"),
yesql.NewSqlInfo("yesql_cc.sql", "../auto/cc", "cc"),
yesql.NewSqlInfo("yesql_pg.sql", "../auto/pg", "pg"),
}
if err := yesql.GenerateFrom(sqlInfos, opt); err != nil {
log.Fatalf("generate code occurs error: %s", err)

@ -0,0 +1,16 @@
--------------------------------------------------------------------------------
-- file yesql.sql
-- this sql file contain some PostgreSQL special sql dml
--------------------------------------------------------------------------------
-- name: add_post@tweet_manage
-- prepare: named_stmt
INSERT INTO @post (user_id, tags, ip, ip_loc, attachment_price, visibility, latest_replied_on, created_on)
VALUES (:user_id, :tags, :ip, :ip_loc, :attachment_price, :visibility, :latest_replied_on, :created_on)
RETURNING id;
-- name: add_post_content@tweet_manage
-- prepare: named_stmt
INSERT INTO @post_content (post_id, user_id, content, type, sort, created_on)
VALUES (:post_id, :user_id, :content, :type, :sort, :created_on)
RETURNING id;
Loading…
Cancel
Save