Skip to content

Commit 68b7751

Browse files
Merge pull request #19 from Sharath-a26/main
Used a shared logger
2 parents 9e26649 + 2dd37fe commit 68b7751

17 files changed

Lines changed: 369 additions & 84 deletions

File tree

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,6 @@ go.work.sum
2323

2424
# env file
2525
.env
26+
27+
# log files
28+
*.log

controller/login.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,9 @@ import (
88
)
99

1010
func Login(res http.ResponseWriter, req *http.Request) {
11-
var logger = util.NewLogger()
12-
logger.Info("Login API called.")
11+
12+
logger := util.SharedLogger
13+
logger.InfoCtx(req, "Login API called.")
1314

1415
data, err := util.Body(req)
1516
if err != nil {

controller/register.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@ import (
99
)
1010

1111
func Register(res http.ResponseWriter, req *http.Request) {
12-
var logger = util.NewLogger()
13-
logger.Info("Register API called.")
12+
13+
logger := util.SharedLogger
14+
logger.InfoCtx(req, "Register API called.")
1415

1516
data, err := util.Body(req)
1617
if err != nil {
@@ -44,8 +45,10 @@ func Register(res http.ResponseWriter, req *http.Request) {
4445
}
4546

4647
func Verify(res http.ResponseWriter, req *http.Request) {
47-
var logger = util.NewLogger()
48-
logger.Info("Verify API called.")
48+
// var logger = util.NewLogger()
49+
50+
logger := util.SharedLogger
51+
logger.InfoCtx(req, "Verify API called.")
4952

5053
token, err := req.Cookie("t")
5154
if err != nil {

controller/test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,11 @@ import (
66
)
77

88
func Test(res http.ResponseWriter, req *http.Request) {
9-
var logger = util.NewLogger()
9+
10+
logger := util.SharedLogger
1011
switch req.Method {
1112
case "GET":
12-
logger.Info("GET /api/test called.")
13+
logger.InfoCtx(req, "GET /api/test called.")
1314
util.JSONResponse(res, http.StatusOK, "It works! 👍🏻", nil)
1415
default:
1516
util.JSONResponse(res, http.StatusMethodNotAllowed, "Method not allowed", nil)

db/init.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,22 +8,23 @@ import (
88
)
99

1010
func InitDb(ctx context.Context) error {
11-
var logger = util.NewLogger()
11+
12+
logger := util.SharedLogger
1213
conn, err := connection.PoolConn(ctx)
1314
if err != nil {
14-
logger.Error("initDb: failed to get pool connection")
15+
logger.Error("initDb: failed to get pool connection", err)
1516
return err
1617
}
1718

1819
sql, err := os.ReadFile("db/scripts/init.sql")
1920
if err != nil {
20-
logger.Error("initDb: failed to read init.sql")
21+
logger.Error("initDb: failed to read init.sql", err)
2122
return err
2223
}
2324

2425
_, err = conn.Exec(ctx, string(sql))
2526
if err != nil {
26-
logger.Error("initDb: failed to execute init.sql")
27+
logger.Error("initDb: failed to execute init.sql", err)
2728
return err
2829
}
2930

db/scripts/init.sql

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
1+
DROP TABLE IF EXISTS teamMembers;
2+
DROP TABLE IF EXISTS team;
13
DROP TABLE IF EXISTS access;
24
DROP TABLE IF EXISTS run;
35
DROP TABLE IF EXISTS registerOtp;
46
DROP TABLE IF EXISTS users;
7+
58
CREATE TABLE IF NOT EXISTS users (
69
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
710
userName STRING UNIQUE NOT NULL,
@@ -41,4 +44,22 @@ CREATE TABLE IF NOT EXISTS access (
4144
PRIMARY KEY (runID, userID),
4245
createdAt TIMESTAMP WITH TIME ZONE DEFAULT now() NOT NULL,
4346
updatedAt TIMESTAMP WITH TIME ZONE DEFAULT now() NOT NULL
47+
);
48+
49+
--table to maintain team metadata
50+
CREATE TABLE IF NOT EXISTS team (
51+
teamID UUID PRIMARY KEY,
52+
createdBy STRING NOT NULL,
53+
role STRING,
54+
createdAt TIMESTAMP WITH TIME ZONE DEFAULT now() NOT NULL,
55+
updatedAt TIMESTAMP WITH TIME ZONE DEFAULT now() NOT NULL
56+
);
57+
58+
--table to maintain team members associated to that team
59+
CREATE TABLE IF NOT EXISTS teamMembers (
60+
memberId UUID REFERENCES users(id),
61+
teamID UUID REFERENCES team(teamID),
62+
PRIMARY KEY (memberId, teamID),
63+
createdAt TIMESTAMP WITH TIME ZONE DEFAULT now() NOT NULL,
64+
updatedAt TIMESTAMP WITH TIME ZONE DEFAULT now() NOT NULL
4465
);

go.mod

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ require (
1818
github.com/jackc/pgpassfile v1.0.0 // indirect
1919
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect
2020
github.com/jackc/puddle/v2 v2.2.2 // indirect
21+
github.com/mattn/go-colorable v0.1.13 // indirect
22+
github.com/mattn/go-isatty v0.0.19 // indirect
23+
github.com/rs/zerolog v1.34.0 // indirect
2124
github.com/stretchr/testify v1.10.0 // indirect
2225
golang.org/x/crypto v0.35.0 // indirect
2326
golang.org/x/net v0.32.0 // indirect

go.sum

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,15 @@ aidanwoods.dev/go-paseto v1.5.4 h1:MH+SBroZEk5Q5pjhVh4l48HIbrdWhWI3SZmA/DXhnuw=
22
aidanwoods.dev/go-paseto v1.5.4/go.mod h1:Rn37AIcqrvSMu0YPw65CrlEUuoyKL6Yw6B0htrGr3EU=
33
aidanwoods.dev/go-result v0.3.1 h1:ee98hpohYUVYbI+pa6gUHTyoRerIudgjky/IPSowDXQ=
44
aidanwoods.dev/go-result v0.3.1/go.mod h1:GKnFg8p/BKulVD3wsfULiPhpPmrTWyiTIbz8EWuUqSk=
5+
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
56
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
67
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
78
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
89
github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
910
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
1011
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
1112
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
13+
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
1214
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
1315
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
1416
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
@@ -23,10 +25,19 @@ github.com/jackc/pgx/v5 v5.7.2 h1:mLoDLV6sonKlvjIEsV56SkWNCnuNv531l94GaIzO+XI=
2325
github.com/jackc/pgx/v5 v5.7.2/go.mod h1:ncY89UGWxg82EykZUwSpUKEfccBGGYq1xjrOpsbsfGQ=
2426
github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo=
2527
github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4=
28+
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
29+
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
30+
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
31+
github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
32+
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
33+
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
2634
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
2735
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
2836
github.com/rs/cors v1.11.1 h1:eU3gRzXLRK57F5rKMGMZURNdIG4EoAmX8k94r9wXWHA=
2937
github.com/rs/cors v1.11.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU=
38+
github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0=
39+
github.com/rs/zerolog v1.34.0 h1:k43nTLIwcTVQAncfCw4KZ2VY6ukYoZaBPNOE8txlOeY=
40+
github.com/rs/zerolog v1.34.0/go.mod h1:bJsvje4Z08ROH4Nhs5iH600c3IkWhwp44iRc54W6wYQ=
3041
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
3142
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
3243
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
@@ -48,6 +59,9 @@ golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI=
4859
golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs=
4960
golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w=
5061
golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
62+
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
63+
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
64+
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
5165
golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=
5266
golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
5367
golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM=

main.go

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package main
22

33
import (
4+
"aidanwoods.dev/go-paseto"
45
"context"
56
"evolve/config"
67
"evolve/controller"
@@ -10,53 +11,55 @@ import (
1011
"evolve/routes"
1112
"evolve/util"
1213
"fmt"
14+
"github.com/rs/cors"
15+
"google.golang.org/grpc"
1316
"net"
1417
"net/http"
1518
"os"
1619
"runtime"
17-
18-
"aidanwoods.dev/go-paseto"
19-
"github.com/rs/cors"
20-
"google.golang.org/grpc"
2120
)
2221

2322
var (
2423
HTTP_PORT string
2524
GRPC_PORT string
2625
)
2726

28-
func serveHTTP(logger *util.Logger) {
27+
func serveHTTP(logger *util.LoggerService) {
2928
// Register routes.
3029
http.HandleFunc(routes.TEST, controller.Test)
3130
http.HandleFunc(routes.REGISTER, controller.Register)
3231
http.HandleFunc(routes.VERIFY, controller.Verify)
3332
http.HandleFunc(routes.LOGIN, controller.Login)
3433

34+
3535
logger.Info(fmt.Sprintf("Test http server on http://localhost%v/api/test", HTTP_PORT))
3636
corsHandler := cors.New(cors.Options{
3737
AllowedOrigins: []string{os.Getenv("FRONTEND_URL")}, // Allowing frontend to access the server.
3838
AllowedMethods: []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"},
3939
AllowedHeaders: []string{"*"},
4040
AllowCredentials: true,
4141
}).Handler(http.DefaultServeMux)
42-
if err := http.ListenAndServe(HTTP_PORT, corsHandler); err != nil {
43-
logger.Error(fmt.Sprintf("Failed to start server: %v", err))
42+
43+
handler := util.Log.LogMiddleware(corsHandler)
44+
45+
if err := http.ListenAndServe(HTTP_PORT, handler); err != nil {
46+
logger.Error(fmt.Sprintf("Failed to start server: %v", err), err)
4447
return
4548
}
4649
}
4750

48-
func serveGRPC(logger *util.Logger) {
51+
func serveGRPC(logger *util.LoggerService) {
4952
lis, err := net.Listen("tcp", GRPC_PORT)
5053
if err != nil {
51-
logger.Error(fmt.Sprintf("failed to listen TCP in GRPC PORT%v : %v", GRPC_PORT, err))
54+
logger.Error(fmt.Sprintf("failed to listen TCP in GRPC PORT%v : %v", GRPC_PORT, err), err)
5255
return
5356
}
5457

5558
s := grpc.NewServer()
5659
pb.RegisterAuthenticateServer(s, &grpcserver.GRPCServer{})
5760
logger.Info(fmt.Sprintf("Test grpc server on http://localhost%v", GRPC_PORT))
5861
if err := s.Serve(lis); err != nil {
59-
logger.Error(fmt.Sprintf("failed to serve: %v", err))
62+
logger.Error(fmt.Sprintf("failed to serve: %v", err), err)
6063
return
6164
}
6265
}
@@ -65,22 +68,29 @@ func main() {
6568

6669
HTTP_PORT = fmt.Sprintf(":%v", os.Getenv("HTTP_PORT"))
6770
GRPC_PORT = fmt.Sprintf(":%v", os.Getenv("GRPC_PORT"))
71+
72+
logger, err := util.InitLogger(os.Getenv("ENV")) // "DEVELOPMENT" or "PRODUCTION"
73+
if err != nil {
74+
fmt.Println("failed to init logger:", err)
75+
return
76+
}
77+
util.Log = logger
6878

69-
var logger = util.NewLogger()
79+
7080

7181
// Initialize db with schema.
7282
if err := db.InitDb(context.Background()); err != nil {
73-
logger.Error("failed to init db")
74-
logger.Error(err.Error())
83+
logger.Error("failed to init db", err)
84+
logger.Error(err.Error(), err)
7585
return
7686
}
7787

7888
// Initialize key.
7989
key := paseto.NewV4AsymmetricSecretKey()
8090
config.PrivateKey, config.PublicKey = key, key.Public()
8191

82-
go serveHTTP(logger)
83-
go serveGRPC(logger)
92+
go serveHTTP(util.Log)
93+
go serveGRPC(util.Log)
8494

8595
runtime.Goexit()
8696
}

modules/login.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,15 +46,15 @@ func (l *LoginReq) validate() error {
4646
}
4747

4848
func (l *LoginReq) Login(ctx context.Context) (map[string]string, error) {
49-
var logger = util.NewLogger()
5049

50+
logger := util.SharedLogger
5151
if err := l.validate(); err != nil {
5252
return nil, err
5353
}
5454

5555
db, err := connection.PoolConn(ctx)
5656
if err != nil {
57-
logger.Error(fmt.Sprintf("Login: failed to get pool connection: %v", err))
57+
logger.Error(fmt.Sprintf("Login: failed to get pool connection: %v", err), err)
5858
return nil, fmt.Errorf("something went wrong")
5959
}
6060

@@ -64,13 +64,13 @@ func (l *LoginReq) Login(ctx context.Context) (map[string]string, error) {
6464

6565
err = db.QueryRow(ctx, "SELECT id, role FROM users WHERE (username = $1 OR email = $2) AND password = $3", l.UserName, l.Email, l.Password).Scan(&id, &role)
6666
if err != nil {
67-
logger.Error(fmt.Sprintf("Login: failed to query user: %v", err))
67+
logger.Error(fmt.Sprintf("Login: failed to query user: %v", err), err)
6868
return nil, fmt.Errorf("invalid username/email or password")
6969
}
7070

7171
user, err := dbutil.UserById(ctx, id.String(), db)
7272
if err != nil {
73-
logger.Error(fmt.Sprintf("Login: failed to get user by id: %v", err))
73+
logger.Error(fmt.Sprintf("Login: failed to get user by id: %v", err), err)
7474
return nil, fmt.Errorf("user not found")
7575
}
7676

@@ -81,7 +81,7 @@ func (l *LoginReq) Login(ctx context.Context) (map[string]string, error) {
8181
"purpose": "login",
8282
})
8383
if err != nil {
84-
logger.Error(fmt.Sprintf("Login: failed to generate token: %v", err))
84+
logger.Error(fmt.Sprintf("Login: failed to generate token: %v", err), err)
8585
return nil, fmt.Errorf("something went wrong")
8686
}
8787

0 commit comments

Comments
 (0)