Skip to content

Commit d074dba

Browse files
authored
Merge pull request #82 from Dzalevski/refactor/storage-interface-implement
2 parents 647ff3c + e601d45 commit d074dba

File tree

22 files changed

+868
-528
lines changed

22 files changed

+868
-528
lines changed

.gitignore

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,7 @@ gin-bin
3131
*.out
3232

3333
# better safe than sorry
34-
config.txt
34+
config.txt
35+
36+
# IDE Settings
37+
.idea

AUTHORS

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api/sgtm.proto

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,3 +281,13 @@ message Session {
281281
int64 user_id = 1 [(go.field) = {name: "UserID"}];
282282
string discord_access_token = 2;
283283
}
284+
285+
message UploadsByWeek {
286+
int64 weekday = 1;
287+
int64 quantity = 2;
288+
}
289+
290+
message PostByKind {
291+
int64 quantity = 1;
292+
Post.Kind kind = 2;
293+
}

gen.sum

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

go.mod

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

go.sum

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/sgtm/api.go

Lines changed: 6 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -30,17 +30,11 @@ func (svc *Service) Me(ctx context.Context, req *sgtmpb.Me_Request) (*sgtmpb.Me_
3030
return nil, err
3131
}
3232

33-
var user sgtmpb.User
34-
err = svc.rodb().
35-
Where("id = ?", claims.Session.UserID).
36-
First(&user).
37-
Error
33+
user, err := svc.storage.GetUserByID(claims.Session.UserID)
3834
if err != nil {
3935
return nil, err
4036
}
41-
ret := sgtmpb.Me_Response{User: &user}
42-
43-
return &ret, nil
37+
return &sgtmpb.Me_Response{User: user}, nil
4438
}
4539

4640
func (svc *Service) Ping(context.Context, *sgtmpb.Ping_Request) (*sgtmpb.Ping_Response, error) {
@@ -57,39 +51,18 @@ func (svc *Service) Status(context.Context, *sgtmpb.Status_Request) (*sgtmpb.Sta
5751
}
5852

5953
func (svc *Service) UserList(context.Context, *sgtmpb.UserList_Request) (*sgtmpb.UserList_Response, error) {
60-
ret := &sgtmpb.UserList_Response{}
61-
err := svc.rodb().
62-
Order("created_at desc").
63-
Find(&ret.Users).
64-
Error
54+
users, err := svc.storage.GetLastUsersList(100)
6555
if err != nil {
6656
return nil, err
6757
}
68-
69-
for _, user := range ret.Users {
70-
user.Filter()
71-
}
72-
return ret, nil
58+
return &sgtmpb.UserList_Response{Users: users}, nil
7359
}
7460

7561
func (svc *Service) PostList(context.Context, *sgtmpb.PostList_Request) (*sgtmpb.PostList_Response, error) {
76-
ret := &sgtmpb.PostList_Response{}
77-
err := svc.rodb().
78-
Order("sort_date desc").
79-
Where(sgtmpb.Post{
80-
Visibility: sgtmpb.Visibility_Public,
81-
}).
82-
Where("kind in (?)", sgtmpb.Post_TrackKind).
83-
Limit(100).
84-
Find(&ret.Posts).
85-
Error
62+
posts, err := svc.storage.GetPostList(100)
8663
if err != nil {
8764
return nil, err
8865
}
8966

90-
for _, post := range ret.Posts {
91-
post.Filter()
92-
}
93-
94-
return ret, nil
67+
return &sgtmpb.PostList_Response{Posts: posts}, nil
9568
}

pkg/sgtm/db.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"github.com/bwmarrin/snowflake"
55
"gorm.io/gorm"
66
"gorm.io/gorm/clause"
7+
78
"moul.io/sgtm/pkg/sgtmpb"
89
)
910

pkg/sgtm/http_server.go

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -302,10 +302,7 @@ func (svc *Service) generateSitemap() *stm.Sitemap {
302302
})
303303
// users
304304
{
305-
var users []*sgtmpb.User
306-
err := svc.rodb().
307-
Find(&users).
308-
Error
305+
users, err := svc.storage.GetLastUsersList(1000)
309306
if err != nil {
310307
svc.logger.Error("query users for sitemap", zap.Error(err))
311308
} else {
@@ -319,14 +316,7 @@ func (svc *Service) generateSitemap() *stm.Sitemap {
319316
}
320317
// posts
321318
{
322-
var posts []*sgtmpb.Post
323-
err := svc.rodb().
324-
Where(sgtmpb.Post{
325-
Visibility: sgtmpb.Visibility_Public,
326-
Kind: sgtmpb.Post_TrackKind,
327-
}).
328-
Find(&posts).
329-
Error
319+
posts, err := svc.storage.GetPostList(100)
330320
if err != nil {
331321
svc.logger.Error("query posts for sitemap", zap.Error(err))
332322
} else {

pkg/sgtm/page_auth.go

Lines changed: 15 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,10 @@ import (
1212
"time"
1313

1414
"github.com/bwmarrin/discordgo"
15-
jwt "github.com/dgrijalva/jwt-go"
16-
"github.com/gosimple/slug"
15+
"github.com/dgrijalva/jwt-go"
1716
"go.uber.org/zap"
1817
"golang.org/x/oauth2"
19-
"gorm.io/gorm"
18+
2019
"moul.io/sgtm/pkg/sgtmpb"
2120
)
2221

@@ -123,66 +122,20 @@ func (svc *Service) httpAuthCallback(w http.ResponseWriter, r *http.Request) {
123122
svc.logger.Debug("get user settings", zap.Any("user", discordUser))
124123
}
125124

126-
// create/update user in DB
127-
var dbUser sgtmpb.User
128-
{
129-
dbUser.Email = discordUser.Email
130-
err := svc.rodb().Where(&dbUser).First(&dbUser).Error
131-
switch {
132-
case errors.Is(err, gorm.ErrRecordNotFound):
133-
// user not found, creating it
134-
dbUser = sgtmpb.User{
135-
Email: discordUser.Email,
136-
Avatar: fmt.Sprintf("https://cdn.discordapp.com/avatars/%s/%s.png", discordUser.ID, discordUser.Avatar),
137-
Slug: slug.Make(discordUser.Username),
138-
Locale: discordUser.Locale,
139-
DiscordID: discordUser.ID,
140-
DiscordUsername: fmt.Sprintf("%s#%s", discordUser.Username, discordUser.Discriminator),
141-
// Firstname
142-
// Lastname
143-
}
144-
// FIXME: check if slug already exists, if yes, append something to the slug
145-
err = svc.rwdb().Transaction(func(tx *gorm.DB) error {
146-
if err := tx.Create(&dbUser).Error; err != nil {
147-
return err
148-
}
149-
150-
registerEvent := sgtmpb.Post{AuthorID: dbUser.ID, Kind: sgtmpb.Post_RegisterKind}
151-
if err := tx.Create(&registerEvent).Error; err != nil {
152-
return err
153-
}
154-
svc.logger.Debug("new register", zap.Any("event", &registerEvent))
155-
156-
linkDiscordEvent := sgtmpb.Post{AuthorID: dbUser.ID, Kind: sgtmpb.Post_LinkDiscordAccountKind}
157-
if err := tx.Create(&linkDiscordEvent).Error; err != nil {
158-
return err
159-
}
160-
svc.logger.Debug("new link discord event", zap.Any("event", &registerEvent))
161-
162-
return nil
163-
})
164-
if err != nil {
165-
svc.errRenderHTML(w, r, err, http.StatusUnprocessableEntity)
166-
return
167-
}
168-
169-
case err == nil:
170-
// user exists
171-
// FIXME: update user in DB if needed
172-
173-
loginEvent := sgtmpb.Post{AuthorID: dbUser.ID, Kind: sgtmpb.Post_LoginKind}
174-
if err := svc.rwdb().Create(&loginEvent).Error; err != nil {
175-
svc.errRenderHTML(w, r, err, http.StatusUnprocessableEntity)
176-
return
177-
}
178-
svc.logger.Debug("new login", zap.Any("event", &loginEvent))
179-
180-
default:
181-
// unexpected error
182-
svc.errRenderHTML(w, r, err, http.StatusUnprocessableEntity)
183-
return
184-
}
125+
dbUser := &sgtmpb.User{
126+
Email: discordUser.Email,
127+
DiscordID: discordUser.ID,
128+
DiscordUsername: discordUser.Username,
129+
Slug: discordUser.Username,
130+
Locale: discordUser.Locale,
131+
Avatar: discordUser.Avatar,
132+
}
133+
dbUser, err := svc.storage.CreateUser(dbUser)
134+
if err != nil {
135+
svc.errRenderHTML(w, r, err, http.StatusUnprocessableEntity)
136+
return
185137
}
138+
svc.logger.Debug("user created/updated", zap.Any("user", &dbUser))
186139

187140
// prepare JWT token
188141
var tokenString string

0 commit comments

Comments
 (0)