-
-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Feature/clog leader board views (#20)
* start of web ui leaderboard * trackscape ts api client * some types clean up * Clans page looks semi decent * Good ui progress * Sub router view * Commit not to lose it * Good enough * Forgive me father for i have sinned
- Loading branch information
1 parent
6c87738
commit 407f779
Showing
57 changed files
with
1,671 additions
and
467 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -5,4 +5,5 @@ shuttle_persist | |
Secrets.dev.toml | ||
.env | ||
.DS_Store | ||
.shuttle-storage | ||
.shuttle-storage | ||
#trackscape-discord-api/ui |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
155 changes: 155 additions & 0 deletions
155
trackscape-discord-api/src/controllers/clan_controller.rs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,155 @@ | ||
use actix_web::{get, web, Error, HttpResponse, Scope}; | ||
use log::{error, info}; | ||
use serde::{Deserialize, Serialize}; | ||
use std::str::FromStr; | ||
use trackscape_discord_shared::database::clan_mate_collection_log_totals::ClanMateCollectionLogTotals; | ||
use trackscape_discord_shared::database::clan_mates::{ClanMateModel, ClanMates}; | ||
use trackscape_discord_shared::database::BotMongoDb; | ||
use web::Data; | ||
|
||
#[derive(Deserialize, Serialize)] | ||
struct ClanViewModel { | ||
id: String, | ||
name: String, | ||
registered_members: u64, | ||
} | ||
|
||
#[derive(Deserialize, Serialize)] | ||
struct ClanDetail { | ||
id: String, | ||
name: String, | ||
discord_guild_id: String, | ||
registered_members: u64, | ||
members: Vec<ClanMateModel>, | ||
} | ||
|
||
#[get("/list")] | ||
async fn list_clans(mongodb: Data<BotMongoDb>) -> Result<HttpResponse, Error> { | ||
let result = mongodb.guilds.list_clans().await; | ||
|
||
match result { | ||
Ok(clans) => { | ||
let mut view_models: Vec<ClanViewModel> = Vec::new(); | ||
for clan in clans { | ||
if clan.clan_name.is_none() { | ||
continue; | ||
} | ||
view_models.push(ClanViewModel { | ||
id: clan.id.to_string(), | ||
name: clan.clan_name.unwrap(), | ||
registered_members: mongodb | ||
.clan_mates | ||
.get_clan_member_count(clan.guild_id) | ||
.await | ||
.unwrap(), | ||
}); | ||
} | ||
|
||
Ok(HttpResponse::Ok().json(view_models)) | ||
} | ||
Err(_) => Ok(HttpResponse::InternalServerError().body("Failed to list clans.")), | ||
} | ||
} | ||
|
||
#[get("/{id}/detail")] | ||
async fn detail( | ||
mongodb: Data<BotMongoDb>, | ||
path: web::Path<(String,)>, | ||
) -> Result<HttpResponse, Error> { | ||
info!("{:?}", path); | ||
let id = path.into_inner().0; | ||
let possible_parsed_id = bson::oid::ObjectId::from_str(id.as_str()); | ||
let id = match possible_parsed_id { | ||
Ok(parsed_id) => parsed_id, | ||
Err(_) => { | ||
return Ok(HttpResponse::BadRequest().body("Invalid id format.")); | ||
} | ||
}; | ||
|
||
let registered_guild_query = mongodb.guilds.get_by_id(id).await; | ||
match registered_guild_query { | ||
Ok(possible_registered_guild) => match possible_registered_guild { | ||
None => { | ||
return Ok(HttpResponse::NotFound().body("Clan not found.")); | ||
} | ||
Some(registered_guild) => { | ||
//return clan details | ||
|
||
let detail = ClanDetail { | ||
id: registered_guild.id.to_string(), | ||
name: registered_guild.clan_name.unwrap(), | ||
discord_guild_id: registered_guild.guild_id.to_string(), | ||
registered_members: mongodb | ||
.clan_mates | ||
.get_clan_member_count(registered_guild.guild_id) | ||
.await | ||
.unwrap(), | ||
members: mongodb | ||
.clan_mates | ||
.get_clan_mates_by_guild_id(registered_guild.guild_id) | ||
.await | ||
.unwrap(), | ||
}; | ||
return Ok(HttpResponse::Ok().json(detail)); | ||
} | ||
}, | ||
Err(err) => { | ||
error!("Failed to get clan by id: {}", err); | ||
return Ok(HttpResponse::BadRequest().body("There was an issue with the request")); | ||
} | ||
} | ||
} | ||
|
||
#[get("/{id}/collection-log")] | ||
async fn collection_log( | ||
mongodb: Data<BotMongoDb>, | ||
path: web::Path<(String,)>, | ||
) -> Result<HttpResponse, Error> { | ||
info!("{:?}", path); | ||
let id = path.into_inner().0; | ||
let possible_parsed_id = bson::oid::ObjectId::from_str(id.as_str()); | ||
let id = match possible_parsed_id { | ||
Ok(parsed_id) => parsed_id, | ||
Err(_) => { | ||
return Ok(HttpResponse::BadRequest().body("Invalid id format.")); | ||
} | ||
}; | ||
|
||
let registered_guild_query = mongodb.guilds.get_by_id(id).await; | ||
match registered_guild_query { | ||
Ok(possible_registered_guild) => match possible_registered_guild { | ||
None => { | ||
return Ok(HttpResponse::NotFound().body("Clan not found.")); | ||
} | ||
Some(registered_guild) => { | ||
//return clan details | ||
let result = mongodb | ||
.clan_mate_collection_log_totals | ||
.get_guild_totals(registered_guild.guild_id) | ||
.await; | ||
match result { | ||
Ok(totals) => { | ||
return Ok(HttpResponse::Ok().json(totals)); | ||
} | ||
Err(err) => { | ||
error!("Failed to get clan by id: {}", err); | ||
return Ok( | ||
HttpResponse::BadRequest().body("There was an issue with the request") | ||
); | ||
} | ||
} | ||
} | ||
}, | ||
Err(err) => { | ||
error!("Failed to get clan by id: {}", err); | ||
return Ok(HttpResponse::BadRequest().body("There was an issue with the request")); | ||
} | ||
} | ||
} | ||
|
||
pub fn clan_controller() -> Scope { | ||
web::scope("/clans") | ||
.service(list_clans) | ||
.service(detail) | ||
.service(collection_log) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,4 @@ | ||
pub mod bot_info_controller; | ||
pub mod chat_controller; | ||
pub mod clan_controller; | ||
pub mod drop_log_controller; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
.list-enter-active[data-v-4930928f],.list-leave-active[data-v-4930928f]{transition:all .5s ease}.list-enter-from[data-v-4930928f],.list-leave-to[data-v-4930928f]{opacity:0;transform:translate(30px)} |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
1 change: 1 addition & 0 deletions
1
trackscape-discord-api/ui/assets/CollectionLogLeaderboardView-de1d73cc.js
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
Oops, something went wrong.