@@ -15,7 +15,6 @@ type SessionStorage interface {
1515 GetSession (ctx context.Context , sessionId string ) (* model.Session , error )
1616 GetSessions (ctx context.Context , userId string , date string , limit uint8 , offset uint16 ) ([]* model.Session , error )
1717 GetSessionsStatistics (ctx context.Context , userId string ) (* model.SessionsStatistics , error )
18- UpdateSession (ctx context.Context , session * model.Session ) error
1918}
2019
2120func (s * Storage ) CreateSession (ctx context.Context , userId string ) (* model.Session , error ) {
@@ -52,22 +51,6 @@ func (s *Storage) CreateSession(ctx context.Context, userId string) (*model.Sess
5251 return & sesh , nil
5352}
5453
55- func (s * Storage ) GetSession (ctx context.Context , sessionId string ) (* model.Session , error ) {
56- query , args , err := sqlx .In (`
57- SELECT * FROM sessions
58- WHERE id = (?)
59- LIMIT 1
60- ` , sessionId )
61- if err != nil {
62- return nil , fmt .Errorf ("prepare get user clause: %w" , err )
63- }
64- var session * model.Session
65- if err := s .db .GetContext (ctx , session , query , args ... ); err != nil {
66- return nil , fmt .Errorf ("get session: %w" , err )
67- }
68- return session , nil
69- }
70-
7154type monthlySessionCount struct {
7255 Month string `db:"month"`
7356 Count uint16 `db:"count"`
@@ -114,6 +97,48 @@ func (s *Storage) GetSessionsStatistics(ctx context.Context, userId string) (*mo
11497 }, nil
11598}
11699
100+ func (s * Storage ) GetSession (ctx context.Context , sessionId string ) (* model.Session , error ){
101+ query , args , err := sqlx .In (`
102+ SELECT
103+ s.id,
104+ s.created_at,
105+ u.display_name AS user_name,
106+ s.user_id,
107+
108+ COUNT(IIF(m.victory, 1, NULL)) AS matches_won,
109+ COUNT(IIF(m.victory = false, 1, NULL)) AS matches_lost,
110+ (100 * COUNT(IIF(m.victory, 1, NULL)) / COUNT(*)) AS win_rate,
111+
112+ m.lp AS starting_lp,
113+ IIF(m.lp != MAX(m.lp), MAX(m.lp), MIN(m.lp)) AS ending_lp,
114+ (MAX(m.lp) - MIN(m.lp)) AS lp_gain,
115+
116+ m.mr AS starting_mr,
117+ IIF(m.mr != MAX(m.mr), MAX(m.mr), MIN(m.mr)) AS ending_mr,
118+ (MAX(m.mr) - MIN(m.mr)) AS mr_gain
119+ FROM sessions AS s
120+ JOIN users u ON u.code = s.user_id
121+ JOIN matches m on s.id = m.session_id
122+ WHERE s.session_id = (?)
123+ GROUP BY s.id
124+ ORDER BY s.id DESC
125+ ` , sessionId )
126+ if err != nil {
127+ return nil , fmt .Errorf ("prepare get sessions query: %w" , err )
128+ }
129+ var session * model.Session
130+ err = s .db .SelectContext (ctx , & session , query , args ... )
131+ if err != nil {
132+ return nil , fmt .Errorf ("excute get session query: %w" , err )
133+ }
134+ matches , err := s .GetMatches (ctx , session .Id , session .UserId , 0 , 0 )
135+ if err != nil {
136+ return nil , fmt .Errorf ("get matches by session: %w" , err )
137+ }
138+ session .Matches = matches
139+ return session , nil
140+ }
141+
117142func (s * Storage ) GetSessions (ctx context.Context , userId string , date string , limit uint8 , offset uint16 ) ([]* model.Session , error ) {
118143 pagination := ``
119144 if limit != 0 || offset != 0 {
@@ -136,20 +161,24 @@ func (s *Storage) GetSessions(ctx context.Context, userId string, date string, l
136161 query , args , err := sqlx .In (fmt .Sprintf (`
137162 SELECT
138163 s.id,
139- s.created_at,
140- u.display_name as user_name,
141- s.user_id,
142- COUNT(IIF(m.victory, 1, NULL)) as matches_won,
143- COUNT(IIF(m.victory = false, 1, NULL)) as matches_lost,
144- m.lp as starting_lp,
145- s.lp as ending_lp,
146- (s.lp - m.lp) as lp_gain,
147- m.mr as starting_mr,
148- s.mr as ending_mr,
149- (s.mr - m.mr) as mr_gain
150- FROM sessions as s
151- JOIN users u on u.code = s.user_id
152- JOIN matches m on s.id = m.session_id
164+ s.created_at,
165+ u.display_name AS user_name,
166+ s.user_id,
167+
168+ COUNT(IIF(m.victory, 1, NULL)) AS matches_won,
169+ COUNT(IIF(m.victory = false, 1, NULL)) AS matches_lost,
170+ (100 * COUNT(IIF(m.victory, 1, NULL)) / COUNT(*)) AS win_rate,
171+
172+ m.lp AS starting_lp,
173+ IIF(m.lp != MAX(m.lp), MAX(m.lp), MIN(m.lp)) AS ending_lp,
174+ (MAX(m.lp) - MIN(m.lp)) AS lp_gain,
175+
176+ m.mr AS starting_mr,
177+ IIF(m.mr != MAX(m.mr), MAX(m.mr), MIN(m.mr)) AS ending_mr,
178+ (MAX(m.mr) - MIN(m.mr)) AS mr_gain
179+ FROM sessions AS s
180+ JOIN users u ON u.code = s.user_id
181+ JOIN matches m on s.id = m.session_id
153182 %s
154183 GROUP BY s.id
155184 ORDER BY s.id DESC
@@ -166,21 +195,6 @@ func (s *Storage) GetSessions(ctx context.Context, userId string, date string, l
166195 return sessions , nil
167196}
168197
169- func (s * Storage ) UpdateSession (ctx context.Context , session * model.Session ) error {
170- query := `
171- UPDATE sessions
172- SET
173- lp = :lp,
174- mr = :mr
175- WHERE id = :id
176- `
177- _ , err := s .db .NamedExecContext (ctx , query , session )
178- if err != nil {
179- return fmt .Errorf ("excute query: %w" , err )
180- }
181- return nil
182- }
183-
184198func (s * Storage ) GetLatestSession (ctx context.Context , userId string ) (* model.Session , error ) {
185199 sessions , err := s .GetSessions (ctx , userId , "" , 1 , 0 )
186200 if err != nil {
0 commit comments