Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
package relation

import (
"github.com/TremblingV5/DouTok/applications/relationDomain/dal/model"
"github.com/TremblingV5/DouTok/applications/relationDomain/dal/query"
"github.com/TremblingV5/DouTok/applications/relationDomain/pack"
"github.com/TremblingV5/DouTok/pkg/utils"
"gorm.io/gorm"
)

type Repository interface {
CreateOrUpdate(relation *pack.Relation) error
CreateList(relationList []*pack.Relation) error
}

type PersistRepository struct {
relation query.IRelationDo
}

func New(db *gorm.DB) *PersistRepository {
return &PersistRepository{
relation: query.Relation.WithContext(db.Statement.Context),
}
}

func packToModel(rel *pack.Relation) *model.Relation {
return &model.Relation{
UserId: rel.UserId,
ToUserId: rel.ToUserId,
Status: int(rel.ActionType),
}
}

func (p *PersistRepository) CreateOrUpdate(rel *pack.Relation) error {
res, err := p.relation.Where(
query.Relation.UserId.Eq(rel.UserId),
query.Relation.ToUserId.Eq(rel.ToUserId),
).Find()
if err != nil {
return err
}
if len(res) > 0 {
// 已经存在关注关系
_, err := p.relation.Where(
query.Relation.UserId.Eq(rel.UserId),
query.Relation.ToUserId.Eq(rel.ToUserId),
).Update(
query.Relation.Status, rel.ActionType,
)
if err != nil {
return err
}
} else {
// 不存在则插入
id := utils.GetSnowFlakeId().Int64()
err := p.relation.Create(
&model.Relation{
ID: id,
UserId: rel.UserId,
ToUserId: rel.ToUserId,
Status: int(rel.ActionType),
},
)
if err != nil {
return err
}
}
return nil
}

func (p *PersistRepository) CreateList(relations []*pack.Relation) error {
models := make([]*model.Relation, 0, len(relations))
for _, relation := range relations {
models = append(models, packToModel(relation))
}
err := p.relation.CreateInBatches(models, len(models))
if err != nil {
return err
}
return nil
}
21 changes: 0 additions & 21 deletions applications/relationDomain/handler/add_relation.go

This file was deleted.

39 changes: 0 additions & 39 deletions applications/relationDomain/handler/count_relation.go

This file was deleted.

101 changes: 101 additions & 0 deletions applications/relationDomain/handler/handler.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
package handler

import (
"context"
"github.com/TremblingV5/DouTok/applications/relationDomain/pack"
"github.com/TremblingV5/DouTok/kitex_gen/relationDomain"
"github.com/TremblingV5/DouTok/pkg/errno"
)

func (h *Handler) AddRelation(ctx context.Context, req *relationDomain.DoutokAddRelationRequest) (resp *relationDomain.DoutokAddRelationResponse, err error) {
resp = new(relationDomain.DoutokAddRelationResponse)

err = h.service.AddRelation(ctx, req.UserId, req.ToUserId)
if err != nil {
pack.BuildRelationActionResp(err, resp)
return resp, nil
}
pack.BuildRelationActionResp(errno.Success, resp)
return resp, nil
}

func (h *Handler) RmRelation(ctx context.Context, req *relationDomain.DoutokRmRelationRequest) (resp *relationDomain.DoutokRmRelationResponse, err error) {
resp = new(relationDomain.DoutokRmRelationResponse)

err = h.service.RmRelation(ctx, req.UserId, req.ToUserId)
if err != nil {
pack.BuildRmRelationActionResp(err, resp)
return resp, nil
}
pack.BuildRmRelationActionResp(errno.Success, resp)
return resp, nil
}

func (h *Handler) ListRelation(ctx context.Context, req *relationDomain.DoutokListRelationRequest) (resp *relationDomain.DoutokListRelationResponse, err error) {

resp = new(relationDomain.DoutokListRelationResponse)
if req.ActionType == 0 {
// 关注
followList, err := h.service.ListFollowList(ctx, req.UserId)
if err != nil {
pack.BuildRelationFollowListResp(err, resp)
return resp, nil
}
resp.UserList = followList
pack.BuildRelationFollowListResp(errno.Success, resp)
return resp, nil
} else if req.ActionType == 1 {
// 粉丝
// 关注
followerList, err := h.service.ListFollowerList(ctx, req.UserId)
if err != nil {
pack.BuildRelationFollowListResp(err, resp)
return resp, nil
}
resp.UserList = followerList
pack.BuildRelationFollowListResp(errno.Success, resp)
return resp, nil
} else if req.ActionType == 2 {
// 互相关注
// 关注
friendList, err := h.service.ListFriendList(ctx, req.UserId)
if err != nil {
pack.BuildRelationFollowListResp(err, resp)
return resp, nil
}
resp.UserList = friendList
pack.BuildRelationFollowListResp(errno.Success, resp)
return resp, nil
}
return resp, nil
}

func (h *Handler) CountRelation(ctx context.Context, req *relationDomain.DoutokCountRelationRequest) (resp *relationDomain.DoutokCountRelationResponse, err error) {
resp = &relationDomain.DoutokCountRelationResponse{
Result: make(map[int64]int64),
}

/*
0 -> 关注数 1 -> 粉丝数
*/
if req.ActionType == 0 {
for _, v := range req.UserId {
follow, err := h.service.GetFollowCount(ctx, v)
if err != nil {
continue
}
resp.Result[v] = follow
}
} else if req.ActionType == 1 {
for _, v := range req.UserId {
follower, err := h.service.GetFollowerCount(ctx, v)
if err != nil {
continue
}
resp.Result[v] = follower
}
}

pack.BuildRelationCountResp(errno.Success, resp)
return resp, nil
}
47 changes: 0 additions & 47 deletions applications/relationDomain/handler/list_relation.go

This file was deleted.

21 changes: 0 additions & 21 deletions applications/relationDomain/handler/rm_relation.go

This file was deleted.

14 changes: 13 additions & 1 deletion applications/relationDomain/handler/typedef.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,15 @@
package handler

type RelationDomainServiceImpl struct{}
import (
"github.com/TremblingV5/DouTok/applications/relationDomain/service"
)

type Handler struct {
service *service.Service
}

func New(service *service.Service) *Handler {
return &Handler{
service: service,
}
}
16 changes: 15 additions & 1 deletion applications/relationDomain/main.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package main

import (
"github.com/TremblingV5/DouTok/applications/relationDomain/dal/query"
relationRepo "github.com/TremblingV5/DouTok/applications/relationDomain/dal/repository/relation"
"github.com/TremblingV5/DouTok/applications/relationDomain/handler"
"github.com/TremblingV5/DouTok/applications/relationDomain/service"
"github.com/TremblingV5/DouTok/kitex_gen/relationDomain/relationdomainservice"
Expand All @@ -17,13 +19,25 @@ func init() {
service.Init()
}

func loadFeature() *handler.Handler {
db, err := service.DomainConfig.MySQL.InitDB()
if err != nil {
panic(err)
}
query.SetDefault(db)

repo := relationRepo.New(db)
relationService := service.New(repo)
return handler.New(relationService)
}

func main() {

options, shutdown := services.InitRPCServerArgs(constants.RELATION_DOMAIN_SERVER_NAME, service.DomainConfig.BaseConfig)
defer shutdown()

svr := relationdomainservice.NewServer(
new(handler.RelationDomainServiceImpl),
loadFeature(),
options...,
)

Expand Down
Loading