@@ -2,6 +2,9 @@ use actix_web::{get, post, put, web, HttpResponse, Responder};
22use serde:: Deserialize ;
33use sqlx:: Acquire ;
44
5+ use crate :: database:: repository:: developers;
6+ use crate :: database:: repository:: mods;
7+ use crate :: events:: mod_feature:: ModFeaturedEvent ;
58use crate :: extractors:: auth:: Auth ;
69use crate :: types:: api:: { create_download_link, ApiError , ApiResponse } ;
710use crate :: types:: mod_json:: ModJson ;
@@ -10,6 +13,7 @@ use crate::types::models::incompatibility::Incompatibility;
1013use crate :: types:: models:: mod_entity:: { download_geode_file, Mod , ModUpdate } ;
1114use crate :: types:: models:: mod_gd_version:: { GDVersionEnum , VerPlatform } ;
1215use crate :: types:: models:: mod_version_status:: ModVersionStatusEnum ;
16+ use crate :: webhook:: discord:: DiscordWebhook ;
1317use crate :: AppData ;
1418
1519#[ derive( Deserialize , Default ) ]
@@ -245,8 +249,10 @@ pub async fn update_mod(
245249 return Err ( ApiError :: Forbidden ) ;
246250 }
247251 let mut pool = data. db . acquire ( ) . await . or ( Err ( ApiError :: DbAcquireError ) ) ?;
252+ let id = path. into_inner ( ) ;
253+ let featured = mods:: is_featured ( & id, & mut pool) ?;
248254 let mut transaction = pool. begin ( ) . await . or ( Err ( ApiError :: TransactionError ) ) ?;
249- if let Err ( e) = Mod :: update_mod ( & path , payload. featured , & mut transaction) . await {
255+ if let Err ( e) = Mod :: update_mod ( & id , payload. featured , & mut transaction) . await {
250256 transaction
251257 . rollback ( )
252258 . await
@@ -258,5 +264,25 @@ pub async fn update_mod(
258264 . await
259265 . or ( Err ( ApiError :: TransactionError ) ) ?;
260266
267+ if featured != payload. featured {
268+ let item = Mod :: get_one ( & id, true , & mut pool) . await ?;
269+ if let Some ( item) = item {
270+ let owner = developers:: get_owner_for_mod ( & id, & mut pool) . await ?;
271+ let first_ver = item. versions . first ( ) ;
272+ if let Some ( ver) = first_ver {
273+ ModFeaturedEvent {
274+ id : item. id ,
275+ name : ver. name . clone ( ) ,
276+ owner,
277+ admin : dev,
278+ base_url : data. app_url . clone ( ) ,
279+ featured : payload. featured ,
280+ }
281+ . to_discord_webhook ( )
282+ . send ( & data. webhook_url ) ;
283+ }
284+ }
285+ }
286+
261287 Ok ( HttpResponse :: NoContent ( ) )
262288}
0 commit comments