From a9743e25bd38ce6626f145d893ab16bcc06c54ea Mon Sep 17 00:00:00 2001 From: Michael Li Date: Sat, 5 Aug 2023 13:28:10 +0800 Subject: [PATCH] sqlx: messages logic is implemented complete. WIP %35 --- internal/dao/sakila/messages.go | 38 +++++++++++++++++---------- internal/dao/sakila/yesql/cc/yesql.go | 20 +++++++------- internal/dao/sakila/yesql/yesql.sql | 14 +++++----- 3 files changed, 41 insertions(+), 31 deletions(-) diff --git a/internal/dao/sakila/messages.go b/internal/dao/sakila/messages.go index 767e949f..8967b8c5 100644 --- a/internal/dao/sakila/messages.go +++ b/internal/dao/sakila/messages.go @@ -5,6 +5,8 @@ package sakila import ( + "time" + "github.com/jmoiron/sqlx" "github.com/rocboss/paopao-ce/internal/core" "github.com/rocboss/paopao-ce/internal/core/ms" @@ -21,17 +23,19 @@ type messageSrv struct { q *cc.Message } -func (s *messageSrv) CreateMessage(msg *ms.Message) (*ms.Message, error) { - res, err := s.q.CreateMessage.Exec(msg) +func (s *messageSrv) CreateMessage(r *ms.Message) (*ms.Message, error) { + r.Model = &dbr.Model{ + CreatedOn: time.Now().Unix(), + } + res, err := s.q.CreateMessage.Exec(r) if err != nil { return nil, err } - id, err := res.LastInsertId() + r.ID, err = res.LastInsertId() if err != nil { return nil, err } - msg.Model = &dbr.Model{ID: id} - return msg, nil + return r, nil } func (s *messageSrv) GetUnreadCount(userID int64) (res int64, err error) { @@ -39,22 +43,28 @@ func (s *messageSrv) GetUnreadCount(userID int64) (res int64, err error) { return } -func (s *messageSrv) GetMessageByID(id int64) (*ms.Message, error) { - res := &ms.Message{} - err := s.q.GetMessageById.Get(res, id) - return res, err +func (s *messageSrv) GetMessageByID(id int64) (res *ms.Message, err error) { + err = s.q.GetMessageById.Get(res, id) + return } -func (s *messageSrv) ReadMessage(message *ms.Message) (err error) { - _, err = s.q.ReadMessage.Exec(message) +func (s *messageSrv) ReadMessage(r *ms.Message) (err error) { + _, err = s.q.ReadMessage.Exec(time.Now().Unix(), r.ID) return } func (s *messageSrv) GetMessages(r *ms.ConditionsT, offset, limit int) ([]*ms.MessageFormated, error) { - res := []*ms.MessageFormated{} + var messages []*ms.Message (*r)["limit"], (*r)["offset"] = limit, offset - err := s.q.GetMessages.Select(&res, r) - return res, err + if err := s.q.GetMessages.Select(&messages, r); err != nil { + return nil, err + } + mfs := make([]*dbr.MessageFormated, 0, len(messages)) + for _, message := range messages { + mf := message.Format() + mfs = append(mfs, mf) + } + return mfs, nil } func (s *messageSrv) GetMessageCount(r *ms.ConditionsT) (res int64, err error) { diff --git a/internal/dao/sakila/yesql/cc/yesql.go b/internal/dao/sakila/yesql/cc/yesql.go index fdbec867..3e979936 100644 --- a/internal/dao/sakila/yesql/cc/yesql.go +++ b/internal/dao/sakila/yesql/cc/yesql.go @@ -54,12 +54,12 @@ const ( _FriendIndex_UserInfo = `SELECT * FROM @user WHERE username=?` _LightIndexA_UserInfo = `SELECT * FROM @user WHERE username=?` _LightIndex_UserInfo = `SELECT * FROM @user WHERE username=?` - _Message_CreateMessage = `SELECT * FROM @user WHERE username=?` - _Message_GetMessageById = `SELECT * FROM @user WHERE username=?` - _Message_GetMessageCount = `SELECT * FROM @user WHERE username=?` - _Message_GetMessages = `SELECT * FROM @user WHERE username=?` - _Message_GetUnreadCount = `SELECT * FROM @user WHERE username=?` - _Message_ReadMessage = `SELECT * FROM @user WHERE username=?` + _Message_CreateMessage = `INSERT INTO @message (sender_user_id, receiver_user_id, type, brief, content, post_id, comment_id, reply_id, created_on) VALUES (:sender_user_id, :receiver_user_id, :type, :brief, :content, :post_id, :comment_id, :reply_id, :created_on)` + _Message_GetMessageById = `SELECT * FROM @message WHERE id=? AND is_del=0` + _Message_GetMessageCount = `SELECT count(*) FROM @message WHERE receiver_user_id=:recerver_user_id AND is_del=0` + _Message_GetMessages = `SELECT * FROM @message WHERE receiver_user_id=:recerver_user_id AND is_del=0 ORDER BY id DESC LIMIT :limit OFFSET :offset` + _Message_GetUnreadCount = `SELECT count(*) FROM @message WHERE receiver_user_id=? AND is_read=0 AND is_del=0` + _Message_ReadMessage = `UPDATE @message SET is_read=1, modified_on=? WHERE id=?` _Security_CreatePhoneCaptcha = `SELECT * FROM @user WHERE username=?` _Security_GetLatestPhoneCaptcha = `SELECT * FROM @user WHERE username=?` _Security_SendPhoneCaptcha = `SELECT * FROM @user WHERE username=?` @@ -217,10 +217,10 @@ type Message struct { yesql.Namespace `yesql:"message"` GetMessageById *sqlx.Stmt `yesql:"get_message_by_id"` GetUnreadCount *sqlx.Stmt `yesql:"get_unread_count"` + ReadMessage *sqlx.Stmt `yesql:"read_message"` CreateMessage *sqlx.NamedStmt `yesql:"create_message"` GetMessageCount *sqlx.NamedStmt `yesql:"get_message_count"` GetMessages *sqlx.NamedStmt `yesql:"get_messages"` - ReadMessage *sqlx.NamedStmt `yesql:"read_message"` } type Security struct { @@ -583,6 +583,9 @@ func BuildMessage(p yesql.PreparexBuilder, ctx ...context.Context) (obj *Message if obj.GetUnreadCount, err = p.PreparexContext(c, p.Rebind(p.QueryHook(_Message_GetUnreadCount))); err != nil { return } + if obj.ReadMessage, err = p.PreparexContext(c, p.Rebind(p.QueryHook(_Message_ReadMessage))); err != nil { + return + } if obj.CreateMessage, err = p.PrepareNamedContext(c, p.Rebind(p.QueryHook(_Message_CreateMessage))); err != nil { return } @@ -592,9 +595,6 @@ func BuildMessage(p yesql.PreparexBuilder, ctx ...context.Context) (obj *Message if obj.GetMessages, err = p.PrepareNamedContext(c, p.Rebind(p.QueryHook(_Message_GetMessages))); err != nil { return } - if obj.ReadMessage, err = p.PrepareNamedContext(c, p.Rebind(p.QueryHook(_Message_ReadMessage))); err != nil { - return - } return } diff --git a/internal/dao/sakila/yesql/yesql.sql b/internal/dao/sakila/yesql/yesql.sql index 181b8458..bf08bbe6 100644 --- a/internal/dao/sakila/yesql/yesql.sql +++ b/internal/dao/sakila/yesql/yesql.sql @@ -167,27 +167,27 @@ SELECT true FROM @contact WHERE user_id=? AND friend_id=? AND is_del=0 AND statu -- name: create_message@message -- prepare: named_stmt -SELECT * FROM @user WHERE username=? +INSERT INTO @message (sender_user_id, receiver_user_id, type, brief, content, post_id, comment_id, reply_id, created_on) VALUES (:sender_user_id, :receiver_user_id, :type, :brief, :content, :post_id, :comment_id, :reply_id, :created_on); -- name: get_unread_count@message -- prepare: stmt -SELECT * FROM @user WHERE username=? +SELECT count(*) FROM @message WHERE receiver_user_id=? AND is_read=0 AND is_del=0; -- name: get_message_by_id@message -- prepare: stmt -SELECT * FROM @user WHERE username=? +SELECT * FROM @message WHERE id=? AND is_del=0; -- name: read_message@message --- prepare: named_stmt -SELECT * FROM @user WHERE username=? +-- prepare: stmt +UPDATE @message SET is_read=1, modified_on=? WHERE id=?; -- name: get_messages@message -- prepare: named_stmt -SELECT * FROM @user WHERE username=? +SELECT * FROM @message WHERE receiver_user_id=:recerver_user_id AND is_del=0 ORDER BY id DESC LIMIT :limit OFFSET :offset -- name: get_message_count@message -- prepare: named_stmt -SELECT * FROM @user WHERE username=? +SELECT count(*) FROM @message WHERE receiver_user_id=:recerver_user_id AND is_del=0; -------------------------------------------------------------------------------- -- security sql dml