Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Microservices #27

Open
wants to merge 161 commits into
base: dev
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
161 commits
Select commit Hold shift + click to select a range
a9f5078
redis mock test
Mar 29, 2023
54a0b19
ci
Mar 29, 2023
29e9008
dockerfile
Mar 29, 2023
f7ee07e
makefile
Mar 30, 2023
af1d775
dev
Apr 2, 2023
1ca43d1
virtual machine
Apr 2, 2023
8b3b387
Dockerfile
Apr 2, 2023
0f19303
fixed project
Apr 3, 2023
ad6cb6b
fixed project
Apr 3, 2023
83c3a36
product
Apr 4, 2023
ab7e72e
project fixed
Apr 4, 2023
cded77d
project fixed
Apr 4, 2023
bc7beb5
project fixed
Apr 4, 2023
139d7a5
fixed project
Apr 4, 2023
93c794a
session edit
marcussss1 Apr 6, 2023
d8dd33e
fixed
Apr 6, 2023
6badce7
fixed messages
Apr 6, 2023
5b67112
fixed messages
Apr 6, 2023
ba632ef
fixed messages
Apr 6, 2023
d57653a
fixed chat getting
Apr 6, 2023
2e0b77c
fixed chats
marcussss1 Apr 7, 2023
042e8a3
messages, chats
Apr 7, 2023
bef491a
fixed project
marcussss1 Apr 8, 2023
b525e1a
fixed project
Apr 8, 2023
34ac044
fixed project
marcussss1 Apr 9, 2023
e94df0a
fixed ws
Apr 9, 2023
a6952b3
fixed project
marcussss1 Apr 11, 2023
5091fcf
fixed project
Apr 11, 2023
351aaf1
added tests, fixed messages
Apr 11, 2023
7b70626
fixed messages
marcussss1 Apr 11, 2023
af2cb3f
fixed messages
marcussss1 Apr 11, 2023
b27888a
fixed titles chats, contacts, last message
Apr 11, 2023
4306daa
fixed contacts
Apr 11, 2023
de2788e
fixed bugs
marcussss1 Apr 12, 2023
29f2a5a
fixed delete chat repository
Apr 12, 2023
90e9e55
fixed project
marcussss1 Apr 12, 2023
7d4f5aa
added editing group
Apr 12, 2023
6b13cb6
added editing group
Apr 12, 2023
5dd705e
added editing group
Apr 12, 2023
db9e34a
added editing group
Apr 12, 2023
420091e
fixed project
marcussss1 Apr 12, 2023
61d6565
fixed project
marcussss1 Apr 12, 2023
cfc589d
fixed images, docker
Apr 12, 2023
081ddae
fixed images, docker
Apr 12, 2023
807b601
fixed tests, images
Apr 12, 2023
eb4fe89
added tests
Apr 12, 2023
86d7f78
added tests
Apr 12, 2023
8dd5cc0
added tests
Apr 12, 2023
f122d4f
fixed minio
Apr 12, 2023
d50c091
virtual machine
marcussss1 Apr 12, 2023
749c220
deploy
Apr 12, 2023
db3b642
edit images
Apr 12, 2023
0438639
edit images
Apr 12, 2023
f2d3e5c
deploy
marcussss1 Apr 12, 2023
1797675
deploy
marcussss1 Apr 14, 2023
631e79a
added generate avatars
Apr 14, 2023
b01d76d
added generate avatars
Apr 14, 2023
321a218
deploy
marcussss1 Apr 14, 2023
1006ffe
added group avatar
Apr 14, 2023
22f7b19
added group avatar
Apr 14, 2023
ae3b8c7
added group avatar
Apr 14, 2023
e02e7fc
fixed groups avatars
Apr 14, 2023
fbfb490
fixed edit chats
Apr 15, 2023
7960127
fixed edit chats
Apr 15, 2023
4b76f45
fixed edit profile, chat
Apr 15, 2023
53fa2d7
fixed put user
Apr 15, 2023
384e282
fixed put user
Apr 15, 2023
302a3cf
fixed put user, chats
Apr 15, 2023
9d76214
fixed project
marcussss1 Apr 15, 2023
620834e
fixed put user
Apr 15, 2023
76fecc0
csrf
Apr 16, 2023
3d32587
csrf
Apr 16, 2023
bb3ade0
csrf
Apr 16, 2023
3edf053
csrf
Apr 16, 2023
e42d03a
csrf
Apr 16, 2023
7f6e572
csrf
Apr 16, 2023
b6a6057
csrf
Apr 16, 2023
a4df7bd
chat microservice
Apr 18, 2023
e378f96
added microservice users, messages, chats
Apr 21, 2023
057d415
added docker microservices
Apr 21, 2023
8c71776
added centrifugo
Apr 22, 2023
1de6916
centrifugo images edited
marcussss1 Apr 22, 2023
ca6d2c7
edited centrifugo endpoint
Apr 22, 2023
a7e00aa
edited centrifugo
Apr 22, 2023
a48bb64
edited messages microservice
Apr 22, 2023
766081c
edited messages microservice
Apr 22, 2023
444ea9f
fixed messages microservice
Apr 23, 2023
4905add
removed centrifugo
Apr 23, 2023
473b7a4
added centrifugo
Apr 23, 2023
30c70fa
added centrifugo
Apr 23, 2023
7711b13
edited centrifugo logic
Apr 23, 2023
51e273e
edited centrifugo logic
Apr 23, 2023
722f9b5
edited centrifugo logic
Apr 23, 2023
b71840a
edited centrifugo logic
Apr 23, 2023
fd0626f
added prometheus, grafana
Apr 23, 2023
1c9fef3
added prometheus, grafana
Apr 23, 2023
7194d43
Generate .pb
niki-gor Apr 25, 2023
bd36b7c
edited context
Apr 25, 2023
d1952bc
refactoring code
Apr 25, 2023
00d79d9
Merge microservices into it
niki-gor Apr 25, 2023
5dfcb8f
Implement clients
niki-gor Apr 25, 2023
8c60288
Fix minor code mismatches
niki-gor Apr 25, 2023
b952aa6
fixed sql many clients
Apr 25, 2023
83018bf
edited avatars, docker-compose
Apr 25, 2023
8f4e17d
closed db rows
Apr 26, 2023
ea456cc
added max sql connections
Apr 26, 2023
f179a4e
added edit, delete message
Apr 26, 2023
dbdb50c
edited time format
Apr 26, 2023
bd4334f
edited time format
Apr 26, 2023
a84407d
edited grpc messages interfaces
Apr 26, 2023
ef84ae4
edited grpc messages interfaces
Apr 26, 2023
57e5f6d
edited messages logic
Apr 26, 2023
afad57b
edited messages logic
Apr 27, 2023
a351971
edit messages logic
Apr 27, 2023
816ead0
edit messages logic
Apr 27, 2023
70a17f9
WIP
niki-gor Apr 27, 2023
f08607d
removed comments
Apr 27, 2023
22577e3
Merge branch 'microservices' into microservices-producer-consumer
marcussss1 Apr 27, 2023
8de43cf
added consumer, producer microservices
Apr 27, 2023
1e2e60c
debug
Apr 27, 2023
455bfb0
debug
Apr 27, 2023
db8207d
debug
Apr 27, 2023
695e638
added producer microservice
Apr 28, 2023
3ad8e07
fixed empty nil
Apr 28, 2023
c3d9238
edited empty bugs
Apr 28, 2023
248a4d6
Implement grpc for auth
niki-gor Apr 28, 2023
4d99c36
fixed messages microservices bugs
Apr 28, 2023
10b0609
fixed messages microservices bugs
Apr 28, 2023
0907bb3
fixed consumer bugs
Apr 28, 2023
09c7bf6
edited docker configs
Apr 28, 2023
75f67c7
Merge branch 'microservices-producer-consumer' into microservices-auth
marcussss1 Apr 29, 2023
17b5204
Merge pull request #30 from go-park-mail-ru/microservices-auth
marcussss1 Apr 29, 2023
d739bd0
added cmd auth
Apr 29, 2023
2e990f8
edited auth protobuf
Apr 29, 2023
2afcef2
refactoring code
Apr 29, 2023
7cf9f0c
removed auth session client
Apr 29, 2023
e8bdbf3
removed auth session models
Apr 29, 2023
173ef03
Merge pull request #28 from go-park-mail-ru/microservices-producer-co…
marcussss1 Apr 29, 2023
c4b03dd
added generation image
Apr 29, 2023
221c211
added waiting time kafka, makeifle
Apr 29, 2023
d627868
edited kafka topic
Apr 29, 2023
fa5170b
edited qaas
Apr 29, 2023
6467b5d
edited docker
Apr 29, 2023
e3a090d
debug
Apr 29, 2023
7fe13ef
added random image generation
Apr 29, 2023
8f360bb
Update README.md
marcussss1 Apr 29, 2023
52097eb
Create README.md
marcussss1 Apr 29, 2023
d0a76ac
Create README.md
marcussss1 Apr 29, 2023
4971e5e
Update README.md
marcussss1 Apr 29, 2023
615d0ed
Update README.md
marcussss1 Apr 29, 2023
3dac7ad
Update README.md
marcussss1 Apr 29, 2023
315bd2b
Update README.md
marcussss1 Apr 29, 2023
b1e22c5
Update README.md
marcussss1 Apr 29, 2023
5091a5c
Update README.md
marcussss1 Apr 29, 2023
d433dc8
added redis config
Apr 30, 2023
a1f122b
added redis config
Apr 30, 2023
e3629fe
Merge pull request #32 from go-park-mail-ru/microservices-fast
marcussss1 Apr 30, 2023
8efe562
12
Apr 30, 2023
f4ea965
edited Dockerfiles
Apr 30, 2023
d7196a8
edited Dockerfiles
Apr 30, 2023
737766d
Fix prometheus api port
niki-gor May 2, 2023
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
2 changes: 1 addition & 1 deletion .env
Original file line number Diff line number Diff line change
@@ -1 +1 @@
YAML_PATH="../../internal/configs/config.yaml"
YAML_PATH="internal/configs/config.yaml"
1 change: 0 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ name: CI
on:
push:
branches: [ backend-dev ]
pull_request:

jobs:
lint:
Expand Down
42 changes: 0 additions & 42 deletions Dockerfile

This file was deleted.

Binary file added Go-Mono.ttf
Binary file not shown.
66 changes: 53 additions & 13 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,27 +1,67 @@
all: run clean
all: clean run

.PHONY: run
run: ## Run project
docker compose up
run:
cd docker && docker compose up -d

.PHONY: clean
clean: ## Clean containers and images
.PHONY: build
build: |
go build -o cmd/auth/auth cmd/auth/main.go
go build -o cmd/api/api cmd/api/main.go
go build -o cmd/chat/chat cmd/chat/main.go
go build -o cmd/consumer/consumer cmd/consumer/main.go
go build -o cmd/producer/producer cmd/producer/main.go
go build -o cmd/messages/messages cmd/messages/main.go
go build -o cmd/user/user cmd/user/main.go
cd docker && docker compose up -d

.PHONY: clean_microservices
clean: |
docker stop api || true
docker stop chat || true
docker stop user || true
docker stop auth || true
docker stop consumer || true
docker stop producer || true
docker stop messages || true

docker rm api || true
docker rm chat || true
docker rm user || true
docker rm auth || true
docker rm consumer || true
docker rm producer || true
docker rm messages || true

docker rmi docker-api || true
docker rmi docker-chat || true
docker rmi docker-user || true
docker rmi docker-auth || true
docker rmi docker-consumer || true
docker rmi docker-producer || true
docker rmi docker-messages || true

.PHONY: clean_images_containers
clean_images_containers: |
docker stop $(docker ps -q)
docker rm -vf $(docker ps -aq)
docker rmi -f $(docker images -aq)
docker system prune -a

.PHONY: generate_proto_rpc
generate_proto_rpc: |
protoc --go-grpc_opt=require_unimplemented_servers=false --go-grpc_out=internal/generated protobuf/*_rpc.proto

.PHONY: test
test: ## Run all the tests
go test ./...
.PHONY: generate_proto
generate_proto: |
find protobuf -type f -name '*.proto' ! -name '*_rpc.proto' -exec protoc --go_out=internal/generated {} +

.PHONY: cover_out
cover_out: test ## Run all the tests and opens the coverage report
cover_out: |
go test -coverprofile=c.out ./... -coverpkg=./...
cat c.out | grep -v "cmd" | grep -v "_mock.go" > tmp.out
cat c.out | grep -v "cmd" | grep -v "_mock.go" | grep -v ".pb" > tmp.out
go tool cover -func=tmp.out

.PHONY: cover_html
cover_html: test ## Run all the tests and opens the coverage report in HTML
cover_html: |
go test -v ./... -coverprofile=c.out ./... -coverpkg=./...
cat c.out | grep -v "cmd" | grep -v "_mock.go" > tmp.out
go tool cover -html=tmp.out
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,6 @@

Ментор по беку - [Олег Реуцкий](https://github.com/astlok)
Ментор по фронту - [Антон Елагин](https://github.com/AntonElagin)

## Статус последнего деплоя:
<br><img src="https://github.com/go-park-mail-ru/2023_1_Brigade/workflows/CI/badge.svg?branch=main"><br>
Binary file added avatars/1d48cc45-2877-4427-8ffa-0c74636321cc.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added avatars/4398fbda-a5a2-480e-99a2-d544a59c28ae.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added avatars/f3264823-d345-474f-94b8-ac521f68e735.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
140 changes: 95 additions & 45 deletions cmd/api/main.go
Original file line number Diff line number Diff line change
@@ -1,46 +1,43 @@
package main

import (
"github.com/go-redis/redis"
_ "github.com/go-sql-driver/mysql"
"github.com/jmoiron/sqlx"
"github.com/joho/godotenv"
"github.com/labstack/echo-contrib/prometheus"
"github.com/labstack/echo/v4"
"github.com/labstack/echo/v4/middleware"
_ "github.com/lib/pq"
"github.com/prometheus/client_golang/prometheus/promhttp"
"github.com/redis/go-redis/v9"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
"gopkg.in/yaml.v2"
"os"
clientAuth "project/internal/clients/auth"
clientChat "project/internal/clients/chat"
clientMessages "project/internal/clients/messages"
clientUser "project/internal/clients/user"

"github.com/minio/minio-go/v7"
"github.com/minio/minio-go/v7/pkg/credentials"
myMiddleware "project/internal/middleware"
httpUser "project/internal/user/delivery/http"

"project/internal/configs"
wsMessages "project/internal/messages/delivery/ws"
myMiddleware "project/internal/middleware"

log "github.com/sirupsen/logrus"

usecaseAuthSession "project/internal/auth/session/usecase"
httpAuthUser "project/internal/auth/user/delivery/http"
httpChat "project/internal/chat/delivery/http"
httpImages "project/internal/images/delivery/http"
wsMessages "project/internal/messages/delivery/ws"
httpUser "project/internal/user/delivery/http"

usecaseAuthSession "project/internal/auth/session/usecase"
usecaseAuthUser "project/internal/auth/user/usecase"
usecaseChat "project/internal/chat/usecase"
usecaseImages "project/internal/images/usecase"
usecaseMessages "project/internal/messages/usecase"
usecaseUser "project/internal/user/usecase"

repositoryAuthSession "project/internal/auth/session/repository"
repositoryAuthUser "project/internal/auth/user/repository"
repositoryChat "project/internal/chat/repository"
repositoryImages "project/internal/images/repository"
repositoryMessages "project/internal/messages/repository"
repositoryUser "project/internal/user/repository"
)

func init() {
envPath := "../../.env"
envPath := ".env"
if err := godotenv.Load(envPath); err != nil {
log.Println("No .env file found")
}
Expand All @@ -60,50 +57,83 @@ func main() {

yamlPath, exists := os.LookupEnv("YAML_PATH")
if !exists {
log.Fatal("Yaml path not found")
log.Error("Yaml path not found")
}

yamlFile, err := os.ReadFile(yamlPath)
if err != nil {
log.Fatal(err)
log.Error(err)
}

var config configs.Config
err = yaml.Unmarshal(yamlFile, &config)
if err != nil {
log.Fatal(err)
log.Error(err)
}

db, err := sqlx.Open(config.Postgres.DB, config.Postgres.ConnectionToDB) // ping
db, err := sqlx.Open(config.Postgres.DB, config.Postgres.ConnectionToDB)
if err != nil {
log.Fatal(err)
log.Error(err)
}
defer db.Close()

db.SetMaxIdleConns(10)
db.SetMaxOpenConns(10)

redis := redis.NewClient(&redis.Options{
Addr: config.Redis.Addr,
})
defer redis.Close()

minioClient, err := minio.New(config.Minio.Endpoint, &minio.Options{
Creds: credentials.NewStaticV4(config.Minio.Username, config.Minio.Password, config.Minio.Token),
})
grpcConnChats, err := grpc.Dial(
config.ChatsService.Addr,
grpc.WithTransportCredentials(insecure.NewCredentials()),
grpc.WithBlock(),
)
if err != nil {
log.Error("cant connect to grpc ", err)
}
defer grpcConnChats.Close()

grpcConnUsers, err := grpc.Dial(
config.UsersService.Addr,
grpc.WithTransportCredentials(insecure.NewCredentials()),
grpc.WithBlock(),
)
if err != nil {
log.Fatal(err)
return
log.Error("cant connect to grpc ", err)
}
defer grpcConnUsers.Close()

userRepository := repositoryUser.NewUserMemoryRepository(db)
chatRepository := repositoryChat.NewChatMemoryRepository(db)
imagesRepostiory := repositoryImages.NewImagesMemoryRepository(minioClient)
messagesRepository := repositoryMessages.NewMessagesMemoryRepository(db)
authUserRepository := repositoryAuthUser.NewAuthUserMemoryRepository(db)
grpcConnMessages, err := grpc.Dial(
config.MessagesService.Addr,
grpc.WithTransportCredentials(insecure.NewCredentials()),
grpc.WithBlock(),
)
if err != nil {
log.Error("cant connect to grpc ", err)
}
defer grpcConnMessages.Close()

grpcConnAuth, err := grpc.Dial(
config.AuthService.Addr,
grpc.WithTransportCredentials(insecure.NewCredentials()),
grpc.WithBlock(),
)
if err != nil {
log.Error("cant connect to grpc ", err)
}
defer grpcConnAuth.Close()

authService := clientAuth.NewAuthUserServiceGRPSClient(grpcConnAuth)
chatService := clientChat.NewChatServiceGRPSClient(grpcConnChats)
userService := clientUser.NewUserServiceGRPSClient(grpcConnUsers)
messagesService := clientMessages.NewMessagesServiceGRPSClient(grpcConnMessages)

imagesRepostiory := repositoryImages.NewImagesMemoryRepository(db)
authSessionRepository := repositoryAuthSession.NewAuthSessionMemoryRepository(redis)

userUsecase := usecaseUser.NewUserUsecase(userRepository, authUserRepository)
authUserUsecase := usecaseAuthUser.NewAuthUserUsecase(authUserRepository, userRepository)
authSessionUsecase := usecaseAuthSession.NewAuthUserUsecase(authSessionRepository)
chatUsecase := usecaseChat.NewChatUsecase(chatRepository, userRepository)
messagesUsecase := usecaseMessages.NewMessagesUsecase(messagesRepository, config.Kafka)
imagesUsecase := usecaseImages.NewChatUsecase(imagesRepostiory)

e := echo.New()
Expand All @@ -112,16 +142,36 @@ func main() {
AllowOrigins: config.Cors.AllowOrigins,
AllowCredentials: config.Cors.AllowCredentials,
AllowHeaders: config.Cors.AllowHeaders,
ExposeHeaders: config.Cors.ExposeHeaders,
}))

//e.Use(middleware.CSRFWithConfig(middleware.CSRFConfig{
// TokenLookup: "header:X-Csrf-Token",
// CookieSecure: true,
// CookieHTTPOnly: true,
// CookiePath: "/",
//}))

e.Use(myMiddleware.LoggerMiddleware)
//e.Use(myMiddleware.XSSMidlleware)
//e.Use(myMiddleware.AuthMiddleware(authSessionUsecase))

httpUser.NewUserHandler(e, userUsecase)
httpAuthUser.NewAuthHandler(e, authUserUsecase, authSessionUsecase, userUsecase)
httpChat.NewChatHandler(e, chatUsecase, userUsecase)
wsMessages.NewMessagesHandler(e, messagesUsecase)
httpImages.NewImagesHandler(e, imagesUsecase)
e.Use(myMiddleware.AuthMiddleware(authSessionUsecase))

p := prometheus.NewPrometheus("echo", nil)
eProtheus := echo.New()

e.Use(p.HandlerFunc)
eProtheus.GET("/metrics", echo.WrapHandler(promhttp.Handler()))
go func() {
err := eProtheus.Start(":8079")
if err != nil {
log.Error(err)
}
}()

httpUser.NewUserHandler(e, userService)
httpAuthUser.NewAuthHandler(e, authService, authSessionUsecase, userService)
httpChat.NewChatHandler(e, chatService, userService)
wsMessages.NewMessagesHandler(e, messagesService)
httpImages.NewImagesHandler(e, userService, imagesUsecase)

e.Logger.Fatal(e.Start(config.Server.Port))
}
Binary file added cmd/auth/auth
Binary file not shown.
Loading