Skip to content

Commit 04ac7d2

Browse files
committed
opt grp application
1 parent 25e1135 commit 04ac7d2

File tree

7 files changed

+141
-26
lines changed

7 files changed

+141
-26
lines changed

apis/groupapply.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,20 @@ func GroupInvite(ctx *gin.Context) {
3939
responses.SuccessHttpResp(ctx, resp)
4040
}
4141

42+
func GroupComfirm(ctx *gin.Context) {
43+
req := models.GroupConfirm{}
44+
if err := ctx.BindJSON(&req); err != nil {
45+
responses.ErrorHttpResp(ctx, errs.IMErrorCode_APP_REQ_BODY_ILLEGAL)
46+
return
47+
}
48+
code := services.GroupConfirm(ctxs.ToCtx(ctx), &req)
49+
if code != errs.IMErrorCode_SUCCESS {
50+
responses.ErrorHttpResp(ctx, code)
51+
return
52+
}
53+
responses.SuccessHttpResp(ctx, nil)
54+
}
55+
4256
func QryMyGrpApplications(ctx *gin.Context) {
4357
startTimeStr := ctx.Query("start")
4458
start, err := utils.String2Int64(startTimeStr)

apis/models/group.go

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,11 @@ type GroupInviteResp struct {
109109
Results map[string]GrpInviteResultReason `json:"results"`
110110
}
111111

112+
type GroupConfirm struct {
113+
ApplicationId string `json:"application_id"`
114+
IsAgree bool `json:"is_agree"`
115+
}
116+
112117
const (
113118
GrpVerifyType_NoNeedGrpVerify int = 0
114119
GrpVerifyType_NeedGrpVerify int = 1
@@ -184,14 +189,15 @@ type QryGrpApplicationsResp struct {
184189
}
185190

186191
type GrpApplicationItem struct {
187-
GrpInfo *GrpInfo `json:"grp_info"`
188-
ApplyType int32 `json:"apply_type"`
189-
Sponsor *UserObj `json:"sponsor"`
190-
Recipient *UserObj `json:"recipient"`
191-
Inviter *UserObj `json:"inviter"`
192-
Operator *UserObj `json:"operator"`
193-
ApplyTime int64 `json:"apply_time"`
194-
Status int32 `json:"status"`
192+
ApplicationId string `json:"application_id"`
193+
GrpInfo *GrpInfo `json:"grp_info"`
194+
ApplyType int32 `json:"apply_type"`
195+
Sponsor *UserObj `json:"sponsor"`
196+
Recipient *UserObj `json:"recipient"`
197+
Inviter *UserObj `json:"inviter"`
198+
Operator *UserObj `json:"operator"`
199+
ApplyTime int64 `json:"apply_time"`
200+
Status int32 `json:"status"`
195201
}
196202

197203
type GrpInfo struct {

routers/router.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ func Route(eng *gin.Engine, prefix string) *gin.RouterGroup {
7676
group.GET("/groups/grpinvitations", apis.QryGrpInvitations)
7777
group.GET("/groups/grppendingapplications", apis.QryGrpPendingApplications)
7878
group.GET("/groups/grpapplications", apis.QryGrpApplications)
79+
group.POST("/groups/grpapplications/confirm", apis.GroupComfirm)
7980

8081
group.GET("/friends/list", apis.QryFriendsWithPage)
8182
group.POST("/friends/search", apis.SearchFriends)

services/groupservice.go

Lines changed: 79 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"github.com/juggleim/commons/ctxs"
99
"github.com/juggleim/commons/errs"
1010
"github.com/juggleim/commons/imsdk"
11+
"github.com/juggleim/commons/tools"
1112
utils "github.com/juggleim/commons/tools"
1213
apimodels "github.com/juggleim/jugglechat-server/apis/models"
1314
"github.com/juggleim/jugglechat-server/storages"
@@ -147,6 +148,23 @@ func QryGroupInfo(ctx context.Context, groupId string) (errs.IMErrorCode, *apimo
147148
return errs.IMErrorCode_SUCCESS, ret
148149
}
149150

151+
func GetGroupInfo(ctx context.Context, groupId string) *apimodels.GrpInfo {
152+
if groupId == "" {
153+
return nil
154+
}
155+
appkey := ctxs.GetAppKeyFromCtx(ctx)
156+
ret := &apimodels.GrpInfo{
157+
GroupId: groupId,
158+
}
159+
grpStorage := storages.NewGroupStorage()
160+
grpInfo, err := grpStorage.FindById(appkey, groupId)
161+
if err == nil && grpInfo != nil {
162+
ret.GroupName = grpInfo.GroupName
163+
ret.GroupPortrait = grpInfo.GroupPortrait
164+
}
165+
return ret
166+
}
167+
150168
func GetGroupSettings(ctx context.Context, groupId string) *apimodels.GroupManagement {
151169
ret := &apimodels.GroupManagement{
152170
GroupEditMsgRight: utils.IntPtr(7),
@@ -490,6 +508,55 @@ func GrpInviteMembers(ctx context.Context, req *apimodels.GroupInviteReq) (errs.
490508
return errs.IMErrorCode_SUCCESS, results
491509
}
492510

511+
func GroupConfirm(ctx context.Context, req *apimodels.GroupConfirm) errs.IMErrorCode {
512+
appkey := ctxs.GetAppKeyFromCtx(ctx)
513+
//TODO check admin
514+
storage := storages.NewGrpApplicationStorage()
515+
id, err := tools.DecodeInt(req.ApplicationId)
516+
if err != nil || id <= 0 {
517+
return errs.IMErrorCode_APP_REQ_BODY_ILLEGAL
518+
}
519+
application, err := storage.FindById(appkey, id)
520+
if err != nil || application == nil {
521+
return errs.IMErrorCode_APP_REQ_BODY_ILLEGAL
522+
}
523+
if application.ApplyType == models.GrpApplicationType_Invite {
524+
if req.IsAgree {
525+
err := storage.UpdateStatus(id, models.GrpApplicationStatus_AgreeInvite)
526+
if err == nil {
527+
memberStorage := storages.NewGroupMemberStorage()
528+
memberStorage.BatchCreate([]models.GroupMember{
529+
{
530+
GroupId: application.GroupId,
531+
MemberId: application.RecipientId,
532+
AppKey: appkey,
533+
},
534+
})
535+
//sync to imserver
536+
if sdk := imsdk.GetImSdk(appkey); sdk != nil {
537+
sdk.GroupAddMembers(juggleimsdk.GroupMembersReq{
538+
GroupId: application.GroupId,
539+
MemberIds: []string{application.RecipientId},
540+
})
541+
}
542+
//send notify msg
543+
targetUsers := []*apimodels.UserObj{
544+
GetUser(ctx, application.RecipientId),
545+
}
546+
notify := &apimodels.GroupNotify{
547+
Operator: GetUser(ctx, application.InviterId),
548+
Members: targetUsers,
549+
Type: apimodels.GroupNotifyType_AddMember,
550+
}
551+
SendGrpNotify(ctx, application.GroupId, notify)
552+
}
553+
} else {
554+
storage.UpdateStatus(id, models.GrpApplicationStatus_DeclineInvite)
555+
}
556+
}
557+
return errs.IMErrorCode_SUCCESS
558+
}
559+
493560
func GrpJoinApply(ctx context.Context, req *apimodels.GroupInviteReq) errs.IMErrorCode {
494561
appkey := ctxs.GetAppKeyFromCtx(ctx)
495562
userId := ctxs.GetRequesterIdFromCtx(ctx)
@@ -939,26 +1006,20 @@ func QryGrpApplications(ctx context.Context, startTime int64, count int32, order
9391006
}
9401007
applications, err := storage.QueryGrpApplications(appkey, groupId, startTime, int64(count), order > 0)
9411008
if err == nil {
1009+
grpInfo := GetGroupInfo(ctx, groupId)
9421010
for _, application := range applications {
1011+
idStr, _ := tools.EncodeInt(application.ID)
1012+
9431013
ret.Items = append(ret.Items, &apimodels.GrpApplicationItem{
944-
GrpInfo: &apimodels.GrpInfo{
945-
GroupId: application.GroupId,
946-
},
947-
ApplyType: int32(application.ApplyType),
948-
Sponsor: &apimodels.UserObj{
949-
UserId: application.SponsorId,
950-
},
951-
Operator: &apimodels.UserObj{
952-
UserId: application.OperatorId,
953-
},
954-
Recipient: &apimodels.UserObj{
955-
UserId: application.RecipientId,
956-
},
957-
Inviter: &apimodels.UserObj{
958-
UserId: application.InviterId,
959-
},
960-
ApplyTime: application.ApplyTime,
961-
Status: int32(application.Status),
1014+
ApplicationId: idStr,
1015+
GrpInfo: grpInfo,
1016+
ApplyType: int32(application.ApplyType),
1017+
Sponsor: GetUser(ctx, application.SponsorId),
1018+
Operator: GetUser(ctx, application.OperatorId),
1019+
Recipient: GetUser(ctx, application.RecipientId),
1020+
Inviter: GetUser(ctx, application.InviterId),
1021+
ApplyTime: application.ApplyTime,
1022+
Status: int32(application.Status),
9621023
})
9631024
}
9641025
}

services/userservice.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -337,6 +337,9 @@ func SearchMyGroups(ctx context.Context, req *apimodels.SearchReq) (errs.IMError
337337
}
338338

339339
func GetUser(ctx context.Context, userId string) *apimodels.UserObj {
340+
if userId == "" {
341+
return nil
342+
}
340343
appkey := ctxs.GetAppKeyFromCtx(ctx)
341344
u := &apimodels.UserObj{
342345
UserId: userId,

storages/dbs/grpapplicationdao.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package dbs
33
import (
44
"fmt"
55

6+
"github.com/jinzhu/gorm"
67
"github.com/juggleim/commons/dbcommons"
78
"github.com/juggleim/jugglechat-server/storages/models"
89

@@ -26,6 +27,29 @@ func (apply GrpApplicationDao) TableName() string {
2627
return "grpapplications"
2728
}
2829

30+
func (apply GrpApplicationDao) FindById(appkey string, id int64) (*models.GrpApplication, error) {
31+
var item GrpApplicationDao
32+
err := dbcommons.GetDb().Where("id=? and app_key=?", id, appkey).Take(&item).Error
33+
if err != nil {
34+
if gorm.IsRecordNotFoundError(err) {
35+
return nil, nil
36+
}
37+
return nil, err
38+
}
39+
return &models.GrpApplication{
40+
ID: item.ID,
41+
GroupId: item.GroupId,
42+
ApplyType: models.GrpApplicationType(item.ApplyType),
43+
SponsorId: item.SponsorId,
44+
RecipientId: item.RecipientId,
45+
InviterId: item.InviterId,
46+
OperatorId: item.OperatorId,
47+
ApplyTime: item.ApplyTime,
48+
Status: models.GrpApplicationStatus(item.Status),
49+
AppKey: item.AppKey,
50+
}, nil
51+
}
52+
2953
func (apply GrpApplicationDao) InviteUpsert(item models.GrpApplication) error {
3054
sql := fmt.Sprintf("INSERT INTO %s (app_key,apply_type,group_id,sponsor_id,recipient_id,inviter_id,operator_id,apply_time,status)VALUES(?,?,?,?,?,?,?,?,?) ON DUPLICATE KEY UPDATE apply_time=VALUES(apply_time),status=VALUES(status),inviter_id=VALUES(inviter_id),operator_id=VALUES(operator_id)", apply.TableName())
3155
return dbcommons.GetDb().Exec(sql, item.AppKey, models.GrpApplicationType_Invite, item.GroupId, "", item.RecipientId, item.InviterId, item.OperatorId, item.ApplyTime, item.Status).Error
@@ -36,6 +60,10 @@ func (apply GrpApplicationDao) ApplyUpsert(item models.GrpApplication) error {
3660
return dbcommons.GetDb().Exec(sql, item.AppKey, models.GrpApplicationType_Apply, item.GroupId, item.SponsorId, "", item.InviterId, item.OperatorId, item.ApplyTime, item.Status).Error
3761
}
3862

63+
func (apply GrpApplicationDao) UpdateStatus(id int64, status models.GrpApplicationStatus) error {
64+
return dbcommons.GetDb().Model(&GrpApplicationDao{}).Where("id=?").Update("status", status).Error
65+
}
66+
3967
func (apply GrpApplicationDao) QueryMyGrpApplications(appkey, sponsorId string, startTime, count int64, isPositive bool) ([]*models.GrpApplication, error) {
4068
var items []*GrpApplicationDao
4169
params := []interface{}{}

storages/models/group.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,10 @@ type GrpApplication struct {
3737
}
3838

3939
type IGrpApplicationStorage interface {
40+
FindById(appkey string, id int64) (*GrpApplication, error)
4041
InviteUpsert(item GrpApplication) error
4142
ApplyUpsert(item GrpApplication) error
43+
UpdateStatus(id int64, status GrpApplicationStatus) error
4244
QueryMyGrpApplications(appkey, sponsorId string, startTime, count int64, isPositive bool) ([]*GrpApplication, error)
4345
QueryMyPendingGrpInvitations(appkey, recipientId string, startTime, count int64, isPositive bool) ([]*GrpApplication, error)
4446
QueryGrpInvitations(appkey, groupId string, startTime, count int64, isPositive bool) ([]*GrpApplication, error)

0 commit comments

Comments
 (0)