update
This commit is contained in:
parent
e74b133c7a
commit
0b3f3a5b3f
@ -12,12 +12,12 @@ import (
|
|||||||
"github.com/themakers/hlog"
|
"github.com/themakers/hlog"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
dalBS "penahub.gitlab.yandexcloud.net/backend/quiz/answerer.git/dal"
|
dalBS "penahub.gitlab.yandexcloud.net/backend/quiz/answerer.git/dal"
|
||||||
|
"penahub.gitlab.yandexcloud.net/backend/quiz/answerer.git/savewc"
|
||||||
"penahub.gitlab.yandexcloud.net/backend/quiz/answerer.git/service"
|
"penahub.gitlab.yandexcloud.net/backend/quiz/answerer.git/service"
|
||||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/dal"
|
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/dal"
|
||||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/healthchecks"
|
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/healthchecks"
|
||||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/middleware"
|
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/middleware"
|
||||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model"
|
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model"
|
||||||
"penahub.gitlab.yandexcloud.net/backend/quiz/worker.git/savewc"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type App struct {
|
type App struct {
|
||||||
|
1
go.mod
1
go.mod
@ -11,7 +11,6 @@ require (
|
|||||||
github.com/themakers/hlog v0.0.0-20191205140925-235e0e4baddf
|
github.com/themakers/hlog v0.0.0-20191205140925-235e0e4baddf
|
||||||
go.uber.org/zap v1.26.0
|
go.uber.org/zap v1.26.0
|
||||||
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240313164312-4560248259a0
|
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240313164312-4560248259a0
|
||||||
penahub.gitlab.yandexcloud.net/backend/quiz/worker.git v0.0.0-20240219182009-751c74a08732
|
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
2
go.sum
2
go.sum
@ -193,5 +193,3 @@ penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240313164312-456
|
|||||||
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240313164312-4560248259a0/go.mod h1:JgbH8cdAJBr3jx3BuY5nnuTyMdZ1XkRxo8a3w4Y3C0Y=
|
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240313164312-4560248259a0/go.mod h1:JgbH8cdAJBr3jx3BuY5nnuTyMdZ1XkRxo8a3w4Y3C0Y=
|
||||||
penahub.gitlab.yandexcloud.net/backend/quiz/core.git v0.0.0-20240313165712-63460dc78d4f h1:bb6dpmEKUOA6XjNyW66A8lPNRl4pISrZ2q/7J0C3mkk=
|
penahub.gitlab.yandexcloud.net/backend/quiz/core.git v0.0.0-20240313165712-63460dc78d4f h1:bb6dpmEKUOA6XjNyW66A8lPNRl4pISrZ2q/7J0C3mkk=
|
||||||
penahub.gitlab.yandexcloud.net/backend/quiz/core.git v0.0.0-20240313165712-63460dc78d4f/go.mod h1:1L60BR27jRadx5JtRKZHYPM5Lilz5Yg+geFSgY7eCnM=
|
penahub.gitlab.yandexcloud.net/backend/quiz/core.git v0.0.0-20240313165712-63460dc78d4f/go.mod h1:1L60BR27jRadx5JtRKZHYPM5Lilz5Yg+geFSgY7eCnM=
|
||||||
penahub.gitlab.yandexcloud.net/backend/quiz/worker.git v0.0.0-20240219182009-751c74a08732 h1:FiUWe2OkFZsTFyoKZIE2uMMEPS0JRetHDG1CWdmayvs=
|
|
||||||
penahub.gitlab.yandexcloud.net/backend/quiz/worker.git v0.0.0-20240219182009-751c74a08732/go.mod h1:AV230HAt2MMzZVdBNxyBaOFmZ4KY4ieDBpBhokIPlPs=
|
|
||||||
|
72
savewc/for_client.go
Normal file
72
savewc/for_client.go
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
package savewc
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"github.com/go-redis/redis/v8"
|
||||||
|
"github.com/themakers/hlog"
|
||||||
|
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
type DepsForClient struct {
|
||||||
|
WorkerSendClientCh chan model.Answer
|
||||||
|
Redis *redis.Client
|
||||||
|
}
|
||||||
|
|
||||||
|
type SaveForClient struct {
|
||||||
|
deps DepsForClient
|
||||||
|
errChan chan<- error
|
||||||
|
logger hlog.Logger
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewSaveClientWorker(deps DepsForClient, errChan chan<- error, logger hlog.Logger) *SaveForClient {
|
||||||
|
return &SaveForClient{
|
||||||
|
deps: deps,
|
||||||
|
errChan: errChan,
|
||||||
|
logger: logger,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w *SaveForClient) Start(ctx context.Context) {
|
||||||
|
|
||||||
|
for {
|
||||||
|
select {
|
||||||
|
case answer, ok := <-w.deps.WorkerSendClientCh:
|
||||||
|
if !ok {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
fmt.Println("SAVECLINT")
|
||||||
|
err := w.saveAnswer(ctx, answer)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("Error save answer")
|
||||||
|
w.errChan <- err
|
||||||
|
}
|
||||||
|
|
||||||
|
case <-ctx.Done():
|
||||||
|
fmt.Println("Save for client worker terminated")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w *SaveForClient) saveAnswer(ctx context.Context, answer model.Answer) error {
|
||||||
|
answerJSON, err := json.Marshal(answer)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("Error marshal answer to redis", err)
|
||||||
|
w.errChan <- err
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
key := fmt.Sprintf("answer:%d", time.Now().UnixNano())
|
||||||
|
|
||||||
|
err = w.deps.Redis.Set(ctx, key, answerJSON, 0).Err()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("Error saving answer to redis", err)
|
||||||
|
w.errChan <- err
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
71
savewc/for_respondent.go
Normal file
71
savewc/for_respondent.go
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
package savewc
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"github.com/go-redis/redis/v8"
|
||||||
|
"github.com/themakers/hlog"
|
||||||
|
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
type DepsForResp struct {
|
||||||
|
WorkerRespondentCh chan []model.Answer
|
||||||
|
Redis *redis.Client
|
||||||
|
}
|
||||||
|
|
||||||
|
type SaveForRespondent struct {
|
||||||
|
deps DepsForResp
|
||||||
|
errChan chan<- error
|
||||||
|
logger hlog.Logger
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewSaveRespWorker(deps DepsForResp, errChan chan<- error, logger hlog.Logger) *SaveForRespondent {
|
||||||
|
return &SaveForRespondent{
|
||||||
|
deps: deps,
|
||||||
|
errChan: errChan,
|
||||||
|
logger: logger,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w *SaveForRespondent) Start(ctx context.Context) {
|
||||||
|
for {
|
||||||
|
select {
|
||||||
|
case answer, ok := <-w.deps.WorkerRespondentCh:
|
||||||
|
if !ok {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
fmt.Println("SAVERESP")
|
||||||
|
err := w.saveAnswers(ctx, answer)
|
||||||
|
if err != nil {
|
||||||
|
w.logger.Module("Error save answers")
|
||||||
|
w.errChan <- err
|
||||||
|
}
|
||||||
|
|
||||||
|
case <-ctx.Done():
|
||||||
|
w.logger.Module("Save for respondent worker terminated")
|
||||||
|
return
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w *SaveForRespondent) saveAnswers(ctx context.Context, answers []model.Answer) error {
|
||||||
|
for _, answer := range answers {
|
||||||
|
answerJSON, err := json.Marshal(answer)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("Error marshal answer", err)
|
||||||
|
w.errChan <- err
|
||||||
|
}
|
||||||
|
|
||||||
|
key := fmt.Sprintf("toRespondent:%d", time.Now().UnixNano())
|
||||||
|
|
||||||
|
err = w.deps.Redis.Set(ctx, key, answerJSON, 0).Err()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("Error setting to redis", err)
|
||||||
|
w.errChan <- err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user