11use std:: collections:: HashMap ;
22
3- use chrono:: Utc ;
3+ use chrono:: SecondsFormat ;
44use semver:: Version ;
55use serde:: Serialize ;
6- use sqlx:: { PgConnection , Postgres , QueryBuilder , Row } ;
6+ use sqlx:: {
7+ types:: chrono:: { DateTime , Utc } ,
8+ PgConnection , Postgres , QueryBuilder , Row
9+ } ;
710
811use crate :: types:: {
912 api:: { create_download_link, ApiError , PaginatedData } ,
@@ -41,6 +44,9 @@ pub struct ModVersion {
4144 pub developers : Option < Vec < Developer > > ,
4245 pub tags : Option < Vec < String > > ,
4346
47+ pub created_at : Option < String > ,
48+ pub updated_at : Option < String > ,
49+
4450 #[ serde( default , skip_serializing_if = "Option::is_none" ) ]
4551 /// Admin/developer only - Reason given to status
4652 pub info : Option < String > ,
@@ -63,6 +69,8 @@ struct ModVersionGetOne {
6369 api : bool ,
6470 mod_id : String ,
6571 status : ModVersionStatusEnum ,
72+ created_at : Option < DateTime < Utc > > ,
73+ updated_at : Option < DateTime < Utc > > ,
6674 #[ sqlx( default ) ]
6775 info : Option < String > ,
6876}
@@ -108,6 +116,8 @@ impl ModVersionGetOne {
108116 incompatibilities : None ,
109117 info : self . info ,
110118 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 ) ) ,
111121 }
112122 }
113123}
@@ -298,10 +308,10 @@ impl ModVersion {
298308
299309 let mut builder: QueryBuilder < Postgres > = QueryBuilder :: new (
300310 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 (
302312 SELECT
303313 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
305315 INNER JOIN mod_versions mv ON m.id = mv.mod_id
306316 INNER JOIN mod_version_statuses mvs ON mvs.mod_version_id = mv.id
307317 INNER JOIN mod_gd_versions mgv ON mgv.mod_id = mv.id
@@ -398,7 +408,7 @@ impl ModVersion {
398408 let mut query_builder: QueryBuilder < Postgres > = QueryBuilder :: new (
399409 r#"SELECT DISTINCT
400410 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
402412 INNER JOIN mod_version_statuses mvs ON mvs.mod_version_id = mv.id
403413 WHERE mvs.status = 'pending' AND mv.mod_id IN ("# ,
404414 ) ;
@@ -441,11 +451,12 @@ impl ModVersion {
441451 let mut query_builder: QueryBuilder < Postgres > = QueryBuilder :: new (
442452 r#"SELECT q.name, q.id, q.description, q.version, q.download_link,
443453 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
445456 FROM (
446457 SELECT mv.name, mv.id, mv.description, mv.version, mv.download_link,
447458 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,
449460 row_number() over (partition by m.id order by mv.id desc) rn
450461 FROM mods m
451462 INNER JOIN mod_versions mv ON m.id = mv.mod_id
@@ -489,7 +500,7 @@ impl ModVersion {
489500 return Err ( ApiError :: NotFound ( "" . to_string ( ) ) ) ;
490501 }
491502 Err ( e) => {
492- log:: info !( "{:?}" , e) ;
503+ log:: error !( "{:?}" , e) ;
493504 return Err ( ApiError :: DbError ) ;
494505 }
495506 } ;
@@ -626,7 +637,8 @@ impl ModVersion {
626637 ModVersionGetOne ,
627638 r#"SELECT mv.id, mv.name, mv.description, mv.version,
628639 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,
630642 mv.mod_id, mvs.status as "status: _", mvs.info
631643 FROM mod_versions mv
632644 INNER JOIN mods m ON m.id = mv.mod_id
0 commit comments