@@ -4,6 +4,11 @@ use actix_web::{dev::ConnectionInfo, get, post, put, web, HttpResponse, Responde
44use serde:: Deserialize ;
55use sqlx:: { types:: ipnetwork:: IpNetwork , Acquire } ;
66
7+ use crate :: database:: repository:: developers;
8+ use crate :: events:: mod_created:: {
9+ NewModAcceptedEvent , NewModVersionAcceptedEvent , NewModVersionVerification ,
10+ } ;
11+ use crate :: webhook:: discord:: DiscordWebhook ;
712use crate :: {
813 extractors:: auth:: Auth ,
914 types:: {
@@ -18,7 +23,6 @@ use crate::{
1823 mod_version_status:: ModVersionStatusEnum ,
1924 } ,
2025 } ,
21- webhook:: send_webhook,
2226 AppData ,
2327} ;
2428
@@ -300,30 +304,27 @@ pub async fn create_version(
300304 . or ( Err ( ApiError :: TransactionError ) ) ?;
301305 return Err ( e) ;
302306 }
303-
304- if dev. verified {
305- send_webhook (
306- json. id . clone ( ) ,
307- json. name . clone ( ) ,
308- json. version . clone ( ) ,
309- true ,
310- Developer {
311- id : dev. id ,
312- username : dev. username . clone ( ) ,
313- display_name : dev. display_name . clone ( ) ,
314- is_owner : true ,
315- } ,
316- dev. clone ( ) ,
317- data. webhook_url . clone ( ) ,
318- data. app_url . clone ( ) ,
319- )
320- . await ;
321- }
322-
323307 transaction
324308 . commit ( )
325309 . await
326310 . or ( Err ( ApiError :: TransactionError ) ) ?;
311+
312+ let approved_count = ModVersion :: get_accepted_count ( & json. id , & mut pool) . await ?;
313+
314+ if dev. verified && approved_count != 0 {
315+ let owner = developers:: get_owner_for_mod ( & json. id , & mut * pool) . await ?;
316+
317+ NewModVersionAcceptedEvent {
318+ id : json. id . clone ( ) ,
319+ name : json. name . clone ( ) ,
320+ version : json. version . clone ( ) ,
321+ owner,
322+ verified : NewModVersionVerification :: Admin ( dev) ,
323+ base_url : data. app_url . clone ( ) ,
324+ }
325+ . to_discord_webhook ( )
326+ . send ( & data. webhook_url ) ;
327+ }
327328 Ok ( HttpResponse :: NoContent ( ) )
328329}
329330
@@ -391,22 +392,31 @@ pub async fn update_version(
391392 if payload. status == ModVersionStatusEnum :: Accepted {
392393 let is_update = approved_count > 0 ;
393394
394- let owner = Developer :: fetch_for_mod ( version. mod_id . as_str ( ) , & mut pool)
395- . await ?
396- . into_iter ( )
397- . find ( |dev| dev. is_owner ) ;
398-
399- send_webhook (
400- version. mod_id ,
401- version. name . clone ( ) ,
402- version. version . clone ( ) ,
403- is_update,
404- owner. as_ref ( ) . unwrap ( ) . clone ( ) ,
405- dev. clone ( ) ,
406- data. webhook_url . clone ( ) ,
407- data. app_url . clone ( ) ,
408- )
409- . await ;
395+ let owner = developers:: get_owner_for_mod ( & version. mod_id , & mut pool) . await ?;
396+
397+ if !is_update {
398+ NewModAcceptedEvent {
399+ id : version. mod_id ,
400+ name : version. name . clone ( ) ,
401+ version : version. version . clone ( ) ,
402+ owner,
403+ verified_by : dev,
404+ base_url : data. app_url . clone ( ) ,
405+ }
406+ . to_discord_webhook ( )
407+ . send ( & data. webhook_url ) ;
408+ } else {
409+ NewModVersionAcceptedEvent {
410+ id : version. mod_id ,
411+ name : version. name . clone ( ) ,
412+ version : version. version . clone ( ) ,
413+ owner,
414+ verified : NewModVersionVerification :: Admin ( dev) ,
415+ base_url : data. app_url . clone ( ) ,
416+ }
417+ . to_discord_webhook ( )
418+ . send ( & data. webhook_url ) ;
419+ }
410420 }
411421
412422 Ok ( HttpResponse :: NoContent ( ) )
0 commit comments