Compare commits

..

2 Commits

Author SHA1 Message Date
daniel.w b8b64302d6 golint 2024-09-05 03:09:48 +08:00
daniel.w 8478442979 add code third party code 2024-08-27 22:24:56 +08:00
13 changed files with 76 additions and 158 deletions

View File

@ -117,6 +117,14 @@ issues:
- gocognit
- contextcheck
exclude-dirs:
- internal/model
exclude-files:
- .*_test.go
linters-settings:
gci:
sections:

View File

@ -18,6 +18,7 @@ test: # 進行測試
fmt: # 格式優化
$(GOFMT) -w $(GOFILES)
goimports -w ./
golangci-lint run
.PHONY: gen-rpc
gen-rpc: # 建立 rpc code

View File

@ -1,90 +0,0 @@
# 專案說明
通知服務
# 專案架構
```
$tree -L 3 --gitignore
.
├── Makefile
├── build
│ └── Dockerfile
├── chart
│ └── readme.md
├── etc
│ └── service.example.yaml # 設定檔範例
├── generate # 這個資料夾會用來自動生成一些程式
│ ├── database ## 資料庫生成檔案或紀錄遷移版本
│ │ ├── mongodb
│ │ ├── mysql
│ │ ├── readme.md
│ │ └── seeder
│ └── protobuf ## gRPC 的定義,用來生成 gRPC 檔案
│ └── notification.proto
├── go.mod
├── internal
│ ├── config # 設定的結構
│ │ └── config.go
│ ├── domain # 此服務下的一些常數定義
│ │ ├── errors.go ## 錯誤定義
│ │ └── usecase ## usecase 內的常數定義
│ │ ├── mail.go
│ │ └── sms.go
│ ├── logic # 主要的程式邏輯都在這,每個功能用一個資料夾開發
│ │ └── senderservice
│ ├── server
│ │ └── senderservice # gRPC 自動產生的檔案
│ ├── svc # 此服務下會共用的功能,例如 API context, db 連線等
│ │ └── service_context.go ## API context
│ └── usecase
│ ├── mitake.go
│ └── smtp.go
└── notification.go # 服務主入口
```
# 啟動說明
此文件會介紹以下兩種啟動方式:
1. Docker 啟動 (Production 時使用)
2. 本地端 go compiler 啟動 (開發、測試時使用)
## Docker 啟動 (Production)
```bash
make build-docker
make run-docker
```
## 本地端啟動(測試用)
```bash
go mod tidy
# 進入 etc/notification.yml 設定各依賴的 config
go run notification.go
```
### 本地啟動需要依賴套件或工具
以下已 macOS 為例,若已安裝或有其他可用服務則可跳過
- go-zero goctl (https://go-zero.dev/docs/tasks/installation/goctl)
```bash
$ go install github.com/zeromicro/go-zero/tools/goctl@latest
```
- protobuf (https://protobuf.dev/)
```bash
brew install protobuf
```
- etcd (https://etcd.io/)
```bash
brew install etcd
brew services start etcd
```
- SMTP 服務(以 mailhog 為例) (https://github.com/mailhog/MailHog)
```bash
brew install mailhog
brew services start mailhog
```

View File

@ -24,10 +24,10 @@ type (
SendMail(ctx context.Context, in *SendMailReq, opts ...grpc.CallOption) (*OKResp, error)
// SendSms 寄簡訊
SendSms(ctx context.Context, in *SendSMSReq, opts ...grpc.CallOption) (*OKResp, error)
// SendMailByTemplateId 寄送模板信件
SendMailByTemplateId(ctx context.Context, in *SendByTemplateIDReq, opts ...grpc.CallOption) (*OKResp, error)
// SendSmsByTemplateId 寄送模板簡訊
SendSmsByTemplateId(ctx context.Context, in *SendByTemplateIDReq, opts ...grpc.CallOption) (*OKResp, error)
// SendMailByTemplateID 寄送模板信件
SendMailByTemplateID(ctx context.Context, in *SendByTemplateIDReq, opts ...grpc.CallOption) (*OKResp, error)
// SendSmsByTemplateID 寄送模板簡訊
SendSmsByTemplateID(ctx context.Context, in *SendByTemplateIDReq, opts ...grpc.CallOption) (*OKResp, error)
}
defaultSenderService struct {
@ -53,14 +53,14 @@ func (m *defaultSenderService) SendSms(ctx context.Context, in *SendSMSReq, opts
return client.SendSms(ctx, in, opts...)
}
// SendMailByTemplateId 寄送模板信件
func (m *defaultSenderService) SendMailByTemplateId(ctx context.Context, in *SendByTemplateIDReq, opts ...grpc.CallOption) (*OKResp, error) {
// SendMailByTemplateID 寄送模板信件
func (m *defaultSenderService) SendMailByTemplateID(ctx context.Context, in *SendByTemplateIDReq, opts ...grpc.CallOption) (*OKResp, error) {
client := notification.NewSenderServiceClient(m.cli.Conn())
return client.SendMailByTemplateId(ctx, in, opts...)
return client.SendMailByTemplateID(ctx, in, opts...)
}
// SendSmsByTemplateId 寄送模板簡訊
func (m *defaultSenderService) SendSmsByTemplateId(ctx context.Context, in *SendByTemplateIDReq, opts ...grpc.CallOption) (*OKResp, error) {
// SendSmsByTemplateID 寄送模板簡訊
func (m *defaultSenderService) SendSmsByTemplateID(ctx context.Context, in *SendByTemplateIDReq, opts ...grpc.CallOption) (*OKResp, error) {
client := notification.NewSenderServiceClient(m.cli.Conn())
return client.SendSmsByTemplateId(ctx, in, opts...)
return client.SendSmsByTemplateID(ctx, in, opts...)
}

View File

@ -35,10 +35,10 @@ service SenderService {
rpc SendMail(SendMailReq) returns(OKResp);
// SendSms
rpc SendSms(SendSMSReq) returns(OKResp);
// SendMailByTemplateId
rpc SendMailByTemplateId(SendByTemplateIDReq) returns(OKResp);
// SendSmsByTemplateId
rpc SendSmsByTemplateId(SendByTemplateIDReq) returns(OKResp);
// SendMailByTemplateID
rpc SendMailByTemplateID(SendByTemplateIDReq) returns(OKResp);
// SendSmsByTemplateID
rpc SendSmsByTemplateID(SendByTemplateIDReq) returns(OKResp);
}

View File

@ -1,7 +1,6 @@
package domain
import (
"fmt"
"strings"
"code.30cm.net/digimon/library-go/errs"
@ -24,14 +23,13 @@ const (
// SendMailError ...
func SendMailError(s ...string) *errs.LibError {
return errs.NewError(code.CloudEPNotification, code.ThirdParty,
SendMailErrorCode.ToUint32(),
fmt.Sprintf("%s", strings.Join(s, " ")))
SendMailErrorCode.ToUint32(), strings.Join(s, " "))
}
// SendMailErrorL logs error message and returns Err
func SendMailErrorL(l logx.Logger, filed []logx.LogField, s ...string) *errs.LibError {
e := SendMailError(s...)
if filed != nil || len(filed) >= 0 {
if filed != nil || len(filed) > 0 {
l.WithCallerSkip(1).WithFields(filed...).Error(e.Error())
}
l.WithCallerSkip(1).Error(e.Error())
@ -42,14 +40,13 @@ func SendMailErrorL(l logx.Logger, filed []logx.LogField, s ...string) *errs.Lib
// SendSMSError ...
func SendSMSError(s ...string) *errs.LibError {
return errs.NewError(code.CloudEPNotification, code.ThirdParty,
SendSMSErrorCode.ToUint32(),
fmt.Sprintf("%s", strings.Join(s, " ")))
SendSMSErrorCode.ToUint32(), strings.Join(s, " "))
}
// SendSMSErrorL logs error message and returns Err
func SendSMSErrorL(l logx.Logger, filed []logx.LogField, s ...string) *errs.LibError {
e := SendSMSError(s...)
if filed != nil || len(filed) >= 0 {
if filed != nil || len(filed) > 0 {
l.WithCallerSkip(1).WithFields(filed...).Error(e.Error())
}
l.WithCallerSkip(1).Error(e.Error())

View File

@ -0,0 +1,31 @@
package senderservicelogic
import (
"context"
"app-cloudep-notification-service/gen_result/pb/notification"
"app-cloudep-notification-service/internal/svc"
"github.com/zeromicro/go-zero/core/logx"
)
type SendMailByTemplateIDLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewSendMailByTemplateIDLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SendMailByTemplateIDLogic {
return &SendMailByTemplateIDLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
// SendMailByTemplateID 寄送模板信件
func (l *SendMailByTemplateIDLogic) SendMailByTemplateID(_ *notification.SendByTemplateIDReq) (*notification.OKResp, error) {
// todo: add your logic here and delete this line
return &notification.OKResp{}, nil
}

View File

@ -1,29 +0,0 @@
package senderservicelogic
import (
"app-cloudep-notification-service/gen_result/pb/notification"
"app-cloudep-notification-service/internal/svc"
"context"
"github.com/zeromicro/go-zero/core/logx"
)
type SendMailByTemplateIdLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewSendMailByTemplateIdLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SendMailByTemplateIdLogic {
return &SendMailByTemplateIdLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
// SendMailByTemplateId 寄送模板信件
func (l *SendMailByTemplateIdLogic) SendMailByTemplateId(in *notification.SendByTemplateIDReq) (*notification.OKResp, error) {
return &notification.OKResp{}, nil
}

View File

@ -9,22 +9,22 @@ import (
"github.com/zeromicro/go-zero/core/logx"
)
type SendSmsByTemplateIdLogic struct {
type SendSmsByTemplateIDLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewSendSmsByTemplateIdLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SendSmsByTemplateIdLogic {
return &SendSmsByTemplateIdLogic{
func NewSendSmsByTemplateIDLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SendSmsByTemplateIDLogic {
return &SendSmsByTemplateIDLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
// SendSmsByTemplateId 寄送模板簡訊
func (l *SendSmsByTemplateIdLogic) SendSmsByTemplateId(in *notification.SendByTemplateIDReq) (*notification.OKResp, error) {
// SendSmsByTemplateID 寄送模板簡訊
func (l *SendSmsByTemplateIDLogic) SendSmsByTemplateID(_ *notification.SendByTemplateIDReq) (*notification.OKResp, error) {
// todo: add your logic here and delete this line
return &notification.OKResp{}, nil

View File

@ -8,7 +8,6 @@ import (
"app-cloudep-notification-service/gen_result/pb/notification"
senderservicelogic "app-cloudep-notification-service/internal/logic/senderservice"
"app-cloudep-notification-service/internal/svc"
)
@ -35,14 +34,14 @@ func (s *SenderServiceServer) SendSms(ctx context.Context, in *notification.Send
return l.SendSms(in)
}
// SendMailByTemplateId 寄送模板信件
func (s *SenderServiceServer) SendMailByTemplateId(ctx context.Context, in *notification.SendByTemplateIDReq) (*notification.OKResp, error) {
l := senderservicelogic.NewSendMailByTemplateIdLogic(ctx, s.svcCtx)
return l.SendMailByTemplateId(in)
// SendMailByTemplateID 寄送模板信件
func (s *SenderServiceServer) SendMailByTemplateID(ctx context.Context, in *notification.SendByTemplateIDReq) (*notification.OKResp, error) {
l := senderservicelogic.NewSendMailByTemplateIDLogic(ctx, s.svcCtx)
return l.SendMailByTemplateID(in)
}
// SendSmsByTemplateId 寄送模板簡訊
func (s *SenderServiceServer) SendSmsByTemplateId(ctx context.Context, in *notification.SendByTemplateIDReq) (*notification.OKResp, error) {
l := senderservicelogic.NewSendSmsByTemplateIdLogic(ctx, s.svcCtx)
return l.SendSmsByTemplateId(in)
// SendSmsByTemplateID 寄送模板簡訊
func (s *SenderServiceServer) SendSmsByTemplateID(ctx context.Context, in *notification.SendByTemplateIDReq) (*notification.OKResp, error) {
l := senderservicelogic.NewSendSmsByTemplateIDLogic(ctx, s.svcCtx)
return l.SendSmsByTemplateID(in)
}

View File

@ -21,6 +21,7 @@ type ServiceContext struct {
func NewServiceContext(c config.Config) *ServiceContext {
errs.Scope = code.CloudEPNotification
return &ServiceContext{
Config: c,
MailSender: usecase.MustMailgunUseCase(usecase.MailUseCaseParam{Conf: c}),

View File

@ -26,6 +26,7 @@ func (s *SMSUseCase) SendSMS(_ context.Context, req usecase.SMSReq) error {
if err != nil {
return err
}
return nil
}

View File

@ -1,13 +1,12 @@
package main
import (
"flag"
"fmt"
"app-cloudep-notification-service/gen_result/pb/notification"
"app-cloudep-notification-service/internal/config"
senderserviceServer "app-cloudep-notification-service/internal/server/senderservice"
"app-cloudep-notification-service/internal/svc"
"flag"
"log"
"github.com/zeromicro/go-zero/core/conf"
"github.com/zeromicro/go-zero/core/service"
@ -34,6 +33,6 @@ func main() {
})
defer s.Stop()
fmt.Printf("Starting rpc server at %s...\n", c.ListenOn)
log.Printf("Starting rpc server at %s...\n", c.ListenOn)
s.Start()
}