1
1
use std:: collections:: HashMap ;
2
2
3
- use chrono:: Utc ;
3
+ use chrono:: SecondsFormat ;
4
4
use semver:: Version ;
5
5
use serde:: Serialize ;
6
- use sqlx:: { PgConnection , Postgres , QueryBuilder , Row } ;
6
+ use sqlx:: {
7
+ types:: chrono:: { DateTime , Utc } ,
8
+ PgConnection , Postgres , QueryBuilder , Row
9
+ } ;
7
10
8
11
use crate :: types:: {
9
12
api:: { create_download_link, ApiError , PaginatedData } ,
@@ -41,6 +44,9 @@ pub struct ModVersion {
41
44
pub developers : Option < Vec < Developer > > ,
42
45
pub tags : Option < Vec < String > > ,
43
46
47
+ pub created_at : Option < String > ,
48
+ pub updated_at : Option < String > ,
49
+
44
50
#[ serde( default , skip_serializing_if = "Option::is_none" ) ]
45
51
/// Admin/developer only - Reason given to status
46
52
pub info : Option < String > ,
@@ -63,6 +69,8 @@ struct ModVersionGetOne {
63
69
api : bool ,
64
70
mod_id : String ,
65
71
status : ModVersionStatusEnum ,
72
+ created_at : Option < DateTime < Utc > > ,
73
+ updated_at : Option < DateTime < Utc > > ,
66
74
#[ sqlx( default ) ]
67
75
info : Option < String > ,
68
76
}
@@ -108,6 +116,8 @@ impl ModVersionGetOne {
108
116
incompatibilities : None ,
109
117
info : self . info ,
110
118
direct_download_link : None ,
119
+ created_at : self . created_at . map ( |x| x. to_rfc3339_opts ( SecondsFormat :: Secs , true ) ) ,
120
+ updated_at : self . updated_at . map ( |x| x. to_rfc3339_opts ( SecondsFormat :: Secs , true ) ) ,
111
121
}
112
122
}
113
123
}
@@ -298,10 +308,10 @@ impl ModVersion {
298
308
299
309
let mut builder: QueryBuilder < Postgres > = QueryBuilder :: new (
300
310
r#"SELECT q.name, q.id, q.description, q.version, q.download_link, q.hash, q.geode, q.download_count,
301
- q.early_load, q.api, q.mod_id, q.status FROM (
311
+ q.early_load, q.api, q.mod_id, q.status, q.created_at, q.updated_at FROM (
302
312
SELECT
303
313
mv.name, mv.id, mv.description, mv.version, mv.download_link, mv.hash, mv.geode, mv.download_count, mvs.status,
304
- mv.early_load, mv.api, mv.mod_id, row_number() over (partition by m.id order by mv.id desc) rn FROM mods m
314
+ mv.early_load, mv.api, mv.mod_id, mv.created_at, mv.updated_at, row_number() over (partition by m.id order by mv.id desc) rn FROM mods m
305
315
INNER JOIN mod_versions mv ON m.id = mv.mod_id
306
316
INNER JOIN mod_version_statuses mvs ON mvs.mod_version_id = mv.id
307
317
INNER JOIN mod_gd_versions mgv ON mgv.mod_id = mv.id
@@ -398,7 +408,7 @@ impl ModVersion {
398
408
let mut query_builder: QueryBuilder < Postgres > = QueryBuilder :: new (
399
409
r#"SELECT DISTINCT
400
410
mv.name, mv.id, mv.description, mv.version, mv.download_link, mv.hash, mv.geode, mv.download_count,
401
- mv.early_load, mv.api, mv.mod_id, mvs.status FROM mod_versions mv
411
+ mv.early_load, mv.api, mv.mod_id, mv.created_at, mv.updated_at, mvs.status FROM mod_versions mv
402
412
INNER JOIN mod_version_statuses mvs ON mvs.mod_version_id = mv.id
403
413
WHERE mvs.status = 'pending' AND mv.mod_id IN ("# ,
404
414
) ;
@@ -441,11 +451,12 @@ impl ModVersion {
441
451
let mut query_builder: QueryBuilder < Postgres > = QueryBuilder :: new (
442
452
r#"SELECT q.name, q.id, q.description, q.version, q.download_link,
443
453
q.hash, q.geode, q.download_count,
444
- q.early_load, q.api, q.mod_id, q.status
454
+ q.early_load, q.api, q.mod_id, q.status,
455
+ q.created_at, q.updated_at
445
456
FROM (
446
457
SELECT mv.name, mv.id, mv.description, mv.version, mv.download_link,
447
458
mv.hash, mv.geode, mv.download_count, mvs.status,
448
- mv.early_load, mv.api, mv.mod_id,
459
+ mv.early_load, mv.api, mv.mod_id, mv.created_at, mv.updated_at,
449
460
row_number() over (partition by m.id order by mv.id desc) rn
450
461
FROM mods m
451
462
INNER JOIN mod_versions mv ON m.id = mv.mod_id
@@ -489,7 +500,7 @@ impl ModVersion {
489
500
return Err ( ApiError :: NotFound ( "" . to_string ( ) ) ) ;
490
501
}
491
502
Err ( e) => {
492
- log:: info !( "{:?}" , e) ;
503
+ log:: error !( "{:?}" , e) ;
493
504
return Err ( ApiError :: DbError ) ;
494
505
}
495
506
} ;
@@ -626,7 +637,8 @@ impl ModVersion {
626
637
ModVersionGetOne ,
627
638
r#"SELECT mv.id, mv.name, mv.description, mv.version,
628
639
mv.download_link, mv.download_count,
629
- mv.hash, mv.geode, mv.early_load, mv.api,
640
+ mv.hash, mv.geode, mv.early_load, mv.api,
641
+ mv.created_at, mv.updated_at,
630
642
mv.mod_id, mvs.status as "status: _", mvs.info
631
643
FROM mod_versions mv
632
644
INNER JOIN mods m ON m.id = mv.mod_id
0 commit comments