@@ -2,7 +2,6 @@ use actix_web::{get, web, Error, HttpResponse, Scope};
2
2
use log:: { error, info} ;
3
3
use serde:: { Deserialize , Serialize } ;
4
4
use std:: str:: FromStr ;
5
- use tokio:: time:: sleep;
6
5
use trackscape_discord_shared:: database:: clan_mate_collection_log_totals:: ClanMateCollectionLogTotals ;
7
6
use trackscape_discord_shared:: database:: clan_mates:: { ClanMateModel , ClanMates } ;
8
7
use trackscape_discord_shared:: database:: BotMongoDb ;
@@ -106,7 +105,6 @@ async fn collection_log(
106
105
mongodb : Data < BotMongoDb > ,
107
106
path : web:: Path < ( String , ) > ,
108
107
) -> Result < HttpResponse , Error > {
109
- sleep ( std:: time:: Duration :: from_secs ( 1 ) ) . await ;
110
108
let id = path. into_inner ( ) . 0 ;
111
109
let possible_parsed_id = bson:: oid:: ObjectId :: from_str ( id. as_str ( ) ) ;
112
110
let id = match possible_parsed_id {
@@ -148,9 +146,54 @@ async fn collection_log(
148
146
}
149
147
}
150
148
149
+ #[ derive( Deserialize ) ]
150
+ struct BroadcastRequest {
151
+ id : String ,
152
+ limit : i64 ,
153
+ }
154
+
155
+ #[ get( "/{id}/broadcasts/{limit}" ) ]
156
+ async fn broadcasts (
157
+ mongodb : Data < BotMongoDb > ,
158
+ path : web:: Path < BroadcastRequest > ,
159
+ ) -> Result < HttpResponse , Error > {
160
+ let possible_parsed_id = bson:: oid:: ObjectId :: from_str ( path. id . as_str ( ) ) ;
161
+ let id = match possible_parsed_id {
162
+ Ok ( parsed_id) => parsed_id,
163
+ Err ( _) => {
164
+ return Ok ( HttpResponse :: BadRequest ( ) . body ( "Invalid id format." ) ) ;
165
+ }
166
+ } ;
167
+ let registered_guild_query = mongodb. guilds . get_by_id ( id) . await ;
168
+ match registered_guild_query {
169
+ Ok ( possible_guild) => match possible_guild {
170
+ Some ( guild) => {
171
+ let limit_to_use = if path. limit > 100 { 100 } else { path. limit } ;
172
+ let broadcasts = mongodb
173
+ . broadcasts
174
+ . get_latest_broadcasts ( guild. guild_id , limit_to_use)
175
+ . await ;
176
+ match broadcasts {
177
+ Ok ( broadcasts) => Ok ( HttpResponse :: Ok ( ) . json ( broadcasts) ) ,
178
+ Err ( err) => {
179
+ error ! ( "Failed to get broadcasts: {}" , err) ;
180
+ Ok ( HttpResponse :: BadRequest ( ) . body ( "There was an issue with the request" ) )
181
+ }
182
+ }
183
+ }
184
+ None => Ok ( HttpResponse :: BadRequest ( ) . body ( "There is not a clan with that id" ) ) ,
185
+ } ,
186
+ Err ( err) => {
187
+ error ! ( "Failed to get clan by id: {}" , err) ;
188
+ Ok ( HttpResponse :: BadRequest ( ) . body ( "There was an issue with the request" ) )
189
+ }
190
+ }
191
+ }
192
+
151
193
pub fn clan_controller ( ) -> Scope {
152
194
web:: scope ( "/clans" )
153
195
. service ( list_clans)
154
196
. service ( detail)
155
197
. service ( collection_log)
198
+ . service ( broadcasts)
156
199
}
0 commit comments