Skip to content

Commit de5a52c

Browse files
authored
Address 845 (#877)
* feat(frontend): display user ID in profile page * fix(frontend): do not include stuff * feat(*): return creator as nested object * feat(backend): change name of subquery * feat(backend): return collaborators for collections * refactor(backend): use aliased entity where suitable * fix(backend): remove admin account guard * chore(backend): remove useless variable * feat(backend): do not ignore issuer id * feat(backend): empty array when no collaborators * fix(frontend): display num collaborators * fix(frontend): do not display if no items * chore(frontend): change order of stuff to display * refactor(backend): use aliased table where necessary * chore(backend): add comment * feat(backend): add log statement after registering user * ci: do not draft an update release * docs: make installation clearer * chore(backend): add separators * feat(backend): do not unwrap background jobs completely * feat(frontend): display edit btn only for collection creator * feat(landing): update links to new page * feat(database): migration to remove seen from array * feat(backend): change name of enum * feat(backend): fn to get finished status * refactor(backend): use new function to get whether show is complete * feat(backend): go through history to determine if media is complete * refactor(backend): change name of variables to be more meaningful * fix(database): update correct array element * fix(backend): append finished to media_reason correctly * chore(*): remove refs to features page * chore(graphql): change types * chore(frontend): adjust to new gql schema * refactor(frontend): extract function to type correctly * feat(backend): change name of filter * fix(frontend): make collections searchable * feat(backend): handle cases when media is in collection * feat(backend): if metadata is finished * feat(backend): store whether seen at least once * feat(backend): change name of enum element * fix(backend): remove calendar event when it does not exist * refactor(backend): reverse logic for deleting invalid calendar events * chore(backend): remove development mutation * refactor(backend): change name of associated func * feat(backend): add trait for ok with tracing * feat(backend): log traces when certain operations fail * feat(backend): do not allow information template in input * chore(database): add comment * build(backend): upgrade deps * build: upgrade typescript deps * feat(frontend): show message when both disabled * ci: extract startup script * Revert "ci: extract startup script" This reverts commit 9936f2c. * feat(backend): add env variable to sleep server before startup * ci: add health endpoint * docs: change health endpoint * ci: remove extra endpoint from health
1 parent d24a49f commit de5a52c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+768
-777
lines changed

.github/workflows/release.yml

+1
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ jobs:
4343
release_id: existingRelease.id,
4444
tag_name: tag,
4545
body: newBody
46+
draft: false,
4647
});
4748
console.log("Release updated to associate with new tag.");
4849
} else {

Cargo.lock

+4-4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

apps/backend/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ argon2 = "=0.6.0-pre.0"
1212
async-graphql = { workspace = true }
1313
async-graphql-axum = "=7.0.6"
1414
async-trait = "=0.1.80"
15-
aws-sdk-s3 = { version = "=1.36.0", features = ["behavior-version-latest"] }
15+
aws-sdk-s3 = { version = "=1.37.0", features = ["behavior-version-latest"] }
1616
axum = { version = "=0.7.5", features = ["macros", "multipart"] }
1717
boilermates = "=0.3.0"
1818
cached = { version = "=0.51.4", features = ["disk_store"] }

apps/backend/src/entities/exercise.rs

+8-2
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,10 @@ pub struct Model {
5151

5252
#[async_trait]
5353
impl GraphqlRepresentation for Model {
54-
async fn graphql_repr(self, file_storage_service: &Arc<FileStorageService>) -> Result<Self> {
54+
async fn graphql_representation(
55+
self,
56+
file_storage_service: &Arc<FileStorageService>,
57+
) -> Result<Self> {
5558
let mut converted_exercise = self.clone();
5659
let mut images = vec![];
5760
for image in self.attributes.internal_images.iter() {
@@ -78,7 +81,10 @@ pub struct ExerciseListItem {
7881

7982
#[async_trait]
8083
impl GraphqlRepresentation for ExerciseListItem {
81-
async fn graphql_repr(self, file_storage_service: &Arc<FileStorageService>) -> Result<Self> {
84+
async fn graphql_representation(
85+
self,
86+
file_storage_service: &Arc<FileStorageService>,
87+
) -> Result<Self> {
8288
let mut converted_exercise = self.clone();
8389
if let Some(img) = self.attributes.internal_images.first() {
8490
converted_exercise.image =

apps/backend/src/entities/workout.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ pub struct Model {
3939

4040
#[async_trait]
4141
impl GraphqlRepresentation for Model {
42-
async fn graphql_repr(self, file_storage_service: &Arc<FileStorageService>) -> Result<Self> {
42+
async fn graphql_representation(self, file_storage_service: &Arc<FileStorageService>) -> Result<Self> {
4343
let mut cnv_workout = self.clone();
4444
for image in cnv_workout.information.assets.images.iter_mut() {
4545
*image = file_storage_service.get_presigned_url(image.clone()).await;

apps/backend/src/fitness/resolver.rs

+6-4
Original file line numberDiff line numberDiff line change
@@ -358,7 +358,7 @@ impl ExerciseService {
358358
let maybe_exercise = Exercise::find_by_id(exercise_id).one(&self.db).await?;
359359
match maybe_exercise {
360360
None => Err(Error::new("Exercise with the given ID could not be found.")),
361-
Some(e) => Ok(e.graphql_repr(&self.file_storage_service).await?),
361+
Some(e) => Ok(e.graphql_representation(&self.file_storage_service).await?),
362362
}
363363
}
364364

@@ -375,7 +375,7 @@ impl ExerciseService {
375375
None => Err(Error::new(
376376
"Workout with the given ID could not be found for this user.",
377377
)),
378-
Some(e) => Ok(e.graphql_repr(&self.file_storage_service).await?),
378+
Some(e) => Ok(e.graphql_representation(&self.file_storage_service).await?),
379379
}
380380
}
381381

@@ -542,7 +542,7 @@ impl ExerciseService {
542542
query.filter(
543543
Condition::any()
544544
.add(
545-
Expr::col((AliasedExercise::Table, exercise::Column::Id))
545+
Expr::col((AliasedExercise::Table, AliasedExercise::Id))
546546
.ilike(ilike_sql(&v)),
547547
)
548548
.add(Expr::col(exercise::Column::Identifier).ilike(slugify(v))),
@@ -570,7 +570,9 @@ impl ExerciseService {
570570
.fetch_page((input.search.page.unwrap() - 1).try_into().unwrap())
571571
.await?
572572
{
573-
let gql_repr = ex.graphql_repr(&self.file_storage_service).await?;
573+
let gql_repr = ex
574+
.graphql_representation(&self.file_storage_service)
575+
.await?;
574576
items.push(gql_repr);
575577
}
576578
let next_page =

apps/backend/src/importer/audiobookshelf.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ use crate::{
2323
StringIdObject,
2424
},
2525
providers::google_books::GoogleBooksService,
26+
traits::TraceOk,
2627
utils::get_base_http_client,
2728
};
2829

@@ -134,7 +135,7 @@ where
134135
..Default::default()
135136
})
136137
.await
137-
.ok();
138+
.trace_ok();
138139
if let Ok(Some(pe)) =
139140
itunes_podcast_episode_by_name(&episode.title, &itunes_id, db)
140141
.await

apps/backend/src/importer/mod.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ use crate::{
2929
},
3030
BackgroundJob, ChangeCollectionToEntityInput, StringIdObject,
3131
},
32-
traits::AuthProvider,
32+
traits::{AuthProvider, TraceOk},
3333
users::{UserPreferences, UserReviewScale},
3434
utils::partial_user_by_id,
3535
};
@@ -626,7 +626,7 @@ impl ImporterService {
626626
self.media_service
627627
.deploy_background_job(&user_id, BackgroundJob::CalculateSummary)
628628
.await
629-
.ok();
629+
.trace_ok();
630630
Ok(())
631631
}
632632

apps/backend/src/integrations.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ use crate::{
1616
miscellaneous::{audiobookshelf_models, itunes_podcast_episode_by_name},
1717
models::{media::CommitMediaInput, StringIdObject},
1818
providers::google_books::GoogleBooksService,
19+
traits::TraceOk,
1920
utils::{get_base_http_client, ilike_sql},
2021
};
2122

@@ -330,7 +331,7 @@ impl IntegrationService {
330331
..Default::default()
331332
})
332333
.await
333-
.ok();
334+
.trace_ok();
334335
match itunes_podcast_episode_by_name(&pe.title, &itunes_id, &self.db)
335336
.await
336337
{

apps/backend/src/main.rs

+10-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,11 @@ use sea_orm::{
3131
ConnectOptions, ConnectionTrait, Database, DatabaseConnection, EntityTrait, PaginatorTrait,
3232
};
3333
use sea_orm_migration::MigratorTrait;
34-
use tokio::{join, net::TcpListener};
34+
use tokio::{
35+
join,
36+
net::TcpListener,
37+
time::{sleep, Duration as TokioDuration},
38+
};
3539
use tower::buffer::BufferLayer;
3640
use tower_http::{
3741
catch_panic::CatchPanicLayer as TowerCatchPanicLayer, cors::CorsLayer as TowerCorsLayer,
@@ -85,6 +89,11 @@ async fn main() -> Result<()> {
8589
tracing::info!("Running version: {}", VERSION);
8690

8791
let config = Arc::new(config::load_app_config()?);
92+
if config.server.sleep_before_startup_seconds > 0 {
93+
let duration = TokioDuration::from_secs(config.server.sleep_before_startup_seconds);
94+
tracing::info!("Sleeping for {:?} before starting up...", duration);
95+
sleep(duration).await;
96+
}
8897
let cors_origins = config
8998
.server
9099
.cors_origins

0 commit comments

Comments
 (0)