Skip to content

Commit ed96493

Browse files
committed
chore: combine workspace settings into workspace context
1 parent b3cd98c commit ed96493

File tree

28 files changed

+514
-602
lines changed

28 files changed

+514
-602
lines changed

clients/javascript/package-lock.json

Lines changed: 7 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/context_aware_config/src/api/audit_log/handlers.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use actix_web::{get, web::Json, Scope};
22
use chrono::{Duration, Utc};
33
use diesel::{BoolExpressionMethods, ExpressionMethods, QueryDsl, RunQueryDsl};
4-
use service_utils::service::types::{DbConnection, SchemaName};
4+
use service_utils::service::types::{DbConnection, WorkspaceContext};
55
use superposition_derives::authorized;
66
use superposition_types::{
77
api::audit_log::AuditQueryFilters,
@@ -17,10 +17,10 @@ pub fn endpoints() -> Scope {
1717
#[authorized]
1818
#[get("")]
1919
async fn list_handler(
20+
workspace_request: WorkspaceContext,
2021
filters: superposition_query::Query<AuditQueryFilters>,
2122
pagination_params: superposition_query::Query<PaginationParams>,
2223
db_conn: DbConnection,
23-
schema_name: SchemaName,
2424
) -> superposition::Result<Json<PaginatedResponse<EventLog>>> {
2525
let now = Utc::now();
2626
let from_date = filters.from_date.unwrap_or(now - Duration::days(7));
@@ -33,7 +33,9 @@ async fn list_handler(
3333
let DbConnection(mut conn) = db_conn;
3434

3535
let query_builder = |filters: &AuditQueryFilters| {
36-
let mut builder = event_log::event_log.schema_name(&schema_name).into_boxed();
36+
let mut builder = event_log::event_log
37+
.schema_name(&workspace_request.schema_name)
38+
.into_boxed();
3739
if let Some(tables) = filters.table.clone() {
3840
builder = builder.filter(event_log::table_name.eq_any(tables.0));
3941
}

crates/context_aware_config/src/api/config/handlers.rs

Lines changed: 41 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ use serde_json::{json, Map, Value};
1818
use service_utils::helpers::extract_dimensions;
1919
#[cfg(feature = "high-performance-mode")]
2020
use service_utils::service::types::{AppHeader, AppState};
21-
use service_utils::service::types::{DbConnection, SchemaName, WorkspaceContext};
21+
use service_utils::service::types::{DbConnection, WorkspaceContext};
2222
use superposition_derives::authorized;
2323
#[cfg(feature = "high-performance-mode")]
2424
use superposition_macros::response_error;
@@ -35,7 +35,7 @@ use superposition_types::{
3535
database::{
3636
models::{
3737
cac::{ConfigVersion, ConfigVersionListItem},
38-
ChangeReason, Workspace,
38+
ChangeReason,
3939
},
4040
schema::config_versions::dsl as config_versions,
4141
},
@@ -294,8 +294,7 @@ async fn reduce_config_key(
294294
dimension_schema_map: &HashMap<String, DimensionInfo>,
295295
default_config: Map<String, Value>,
296296
is_approve: bool,
297-
schema_name: &SchemaName,
298-
workspace_settings: &Workspace,
297+
workspace_request: &WorkspaceContext,
299298
) -> superposition::Result<Config> {
300299
let default_config_val =
301300
default_config
@@ -356,12 +355,22 @@ async fn reduce_config_key(
356355
) => {
357356
if *to_be_deleted {
358357
if is_approve {
359-
let _ = context::delete(cid.clone(), user, conn, schema_name);
358+
let _ = context::delete(
359+
cid.clone(),
360+
user,
361+
conn,
362+
&workspace_request.schema_name,
363+
);
360364
}
361365
og_contexts.retain(|x| x.id != *cid);
362366
} else {
363367
if is_approve {
364-
let _ = context::delete(cid.clone(), user, conn, schema_name);
368+
let _ = context::delete(
369+
cid.clone(),
370+
user,
371+
conn,
372+
&workspace_request.schema_name,
373+
);
365374
if let Ok(put_req) = construct_new_payload(request_payload) {
366375
let description = match put_req.description.clone() {
367376
Some(val) => val,
@@ -370,7 +379,7 @@ async fn reduce_config_key(
370379
put_req.context.clone().into_inner().into(),
371380
),
372381
conn,
373-
schema_name,
382+
&workspace_request.schema_name,
374383
)?,
375384
};
376385

@@ -380,8 +389,7 @@ async fn reduce_config_key(
380389
conn,
381390
false,
382391
user,
383-
schema_name,
384-
workspace_settings,
392+
workspace_request,
385393
false,
386394
);
387395
}
@@ -436,11 +444,10 @@ async fn reduce_config_key(
436444
#[authorized]
437445
#[put("/reduce")]
438446
async fn reduce_handler(
447+
workspace_request: WorkspaceContext,
439448
req: HttpRequest,
440-
workspace_settings: Workspace,
441449
user: User,
442450
db_conn: DbConnection,
443-
schema_name: SchemaName,
444451
) -> superposition::Result<HttpResponse> {
445452
let DbConnection(mut conn) = db_conn;
446453
let is_approve = req
@@ -449,8 +456,9 @@ async fn reduce_handler(
449456
.and_then(|value| value.to_str().ok().and_then(|s| s.parse::<bool>().ok()))
450457
.unwrap_or(false);
451458

452-
let dimensions_info_map = fetch_dimensions_info_map(&mut conn, &schema_name)?;
453-
let mut config = generate_cac(&mut conn, &schema_name)?;
459+
let dimensions_info_map =
460+
fetch_dimensions_info_map(&mut conn, &workspace_request.schema_name)?;
461+
let mut config = generate_cac(&mut conn, &workspace_request.schema_name)?;
454462
let default_config = (config.default_configs).clone();
455463
for (key, _) in default_config {
456464
let contexts = config.contexts;
@@ -465,12 +473,11 @@ async fn reduce_handler(
465473
&dimensions_info_map,
466474
default_config.clone(),
467475
is_approve,
468-
&schema_name,
469-
&workspace_settings,
476+
&workspace_request,
470477
)
471478
.await?;
472479
if is_approve {
473-
config = generate_cac(&mut conn, &schema_name)?;
480+
config = generate_cac(&mut conn, &workspace_request.schema_name)?;
474481
}
475482
}
476483

@@ -480,10 +487,7 @@ async fn reduce_handler(
480487
#[cfg(feature = "high-performance-mode")]
481488
#[authorized]
482489
#[get("/fast")]
483-
async fn get_fast_handler(
484-
schema_name: SchemaName,
485-
state: Data<AppState>,
486-
) -> superposition::Result<HttpResponse> {
490+
async fn get_fast_handler(state: Data<AppState>) -> superposition::Result<HttpResponse> {
487491
use fred::interfaces::MetricsInterface;
488492

489493
log::debug!("Started redis fetch");
@@ -577,11 +581,11 @@ async fn get_handler(
577581
db_conn: DbConnection,
578582
dimension_params: DimensionQuery<QueryMap>,
579583
query_filters: superposition_query::Query<ConfigQuery>,
580-
workspace_context: WorkspaceContext,
584+
workspace_request: WorkspaceContext,
581585
) -> superposition::Result<HttpResponse> {
582586
let DbConnection(mut conn) = db_conn;
583587

584-
let max_created_at = get_max_created_at(&mut conn, &workspace_context.schema_name)
588+
let max_created_at = get_max_created_at(&mut conn, &workspace_request.schema_name)
585589
.map_err(|e| log::error!("failed to fetch max timestamp from event_log: {e}"))
586590
.ok();
587591

@@ -594,13 +598,12 @@ async fn get_handler(
594598
}
595599

596600
let query_filters = query_filters.into_inner();
597-
let mut version =
598-
get_config_version(&query_filters.version, &workspace_context, &mut conn)?;
601+
let mut version = get_config_version(&query_filters.version, &workspace_request)?;
599602

600603
let mut config = generate_config_from_version(
601604
&mut version,
602605
&mut conn,
603-
&workspace_context.schema_name,
606+
&workspace_request.schema_name,
604607
)?;
605608

606609
config = apply_prefix_filter_to_config(&query_filters.prefix, config)?;
@@ -619,7 +622,7 @@ async fn get_handler(
619622

620623
let mut response = HttpResponse::Ok();
621624
add_last_modified_to_header(max_created_at, is_smithy, &mut response);
622-
add_audit_id_to_header(&mut conn, &mut response, &workspace_context.schema_name);
625+
add_audit_id_to_header(&mut conn, &mut response, &workspace_request.schema_name);
623626
add_config_version_to_header(&version, &mut response);
624627
Ok(response.json(config))
625628
}
@@ -636,12 +639,12 @@ async fn resolve_handler(
636639
db_conn: DbConnection,
637640
dimension_params: DimensionQuery<QueryMap>,
638641
query_filters: superposition_query::Query<ResolveConfigQuery>,
639-
workspace_context: WorkspaceContext,
642+
workspace_request: WorkspaceContext,
640643
) -> superposition::Result<HttpResponse> {
641644
let DbConnection(mut conn) = db_conn;
642645
let query_filters = query_filters.into_inner();
643646

644-
let max_created_at = get_max_created_at(&mut conn, &workspace_context.schema_name)
647+
let max_created_at = get_max_created_at(&mut conn, &workspace_request.schema_name)
645648
.map_err(|e| log::error!("failed to fetch max timestamp from event_log : {e}"))
646649
.ok();
647650

@@ -650,11 +653,11 @@ async fn resolve_handler(
650653
}
651654

652655
let mut config_version =
653-
get_config_version(&query_filters.version, &workspace_context, &mut conn)?;
656+
get_config_version(&query_filters.version, &workspace_request)?;
654657
let mut config = generate_config_from_version(
655658
&mut config_version,
656659
&mut conn,
657-
&workspace_context.schema_name,
660+
&workspace_request.schema_name,
658661
)?;
659662
let (is_smithy, query_data) = setup_query_data(&req, &body, &dimension_params)?;
660663

@@ -664,41 +667,41 @@ async fn resolve_handler(
664667
merge_strategy,
665668
&mut conn,
666669
&query_filters,
667-
&workspace_context,
670+
&workspace_request,
668671
)?;
669672

670673
let mut resp = HttpResponse::Ok();
671674
add_last_modified_to_header(max_created_at, is_smithy, &mut resp);
672-
add_audit_id_to_header(&mut conn, &mut resp, &workspace_context.schema_name);
675+
add_audit_id_to_header(&mut conn, &mut resp, &workspace_request.schema_name);
673676
add_config_version_to_header(&config_version, &mut resp);
674677
Ok(resp.json(resolved_config))
675678
}
676679

677680
#[authorized]
678681
#[get("/versions")]
679682
async fn list_version_handler(
683+
workspace_request: WorkspaceContext,
680684
db_conn: DbConnection,
681685
filters: Query<PaginationParams>,
682-
schema_name: SchemaName,
683686
) -> superposition::Result<Json<PaginatedResponse<ConfigVersionListItem>>> {
684687
let DbConnection(mut conn) = db_conn;
685688

686689
if let Some(true) = filters.all {
687690
let config_versions = config_versions::config_versions
688-
.schema_name(&schema_name)
691+
.schema_name(&workspace_request.schema_name)
689692
.select(ConfigVersionListItem::as_select())
690693
.get_results(&mut conn)?;
691694
return Ok(Json(PaginatedResponse::all(config_versions)));
692695
}
693696

694697
let n_version: i64 = config_versions::config_versions
695698
.count()
696-
.schema_name(&schema_name)
699+
.schema_name(&workspace_request.schema_name)
697700
.get_result(&mut conn)?;
698701

699702
let limit = filters.count.unwrap_or(10);
700703
let mut builder = config_versions::config_versions
701-
.schema_name(&schema_name)
704+
.schema_name(&workspace_request.schema_name)
702705
.into_boxed()
703706
.order(config_versions::created_at.desc())
704707
.limit(limit);
@@ -720,14 +723,14 @@ async fn list_version_handler(
720723
#[authorized]
721724
#[get("/version/{version}")]
722725
async fn get_version_handler(
726+
workspace_request: WorkspaceContext,
723727
db_conn: DbConnection,
724728
version: Path<i64>,
725-
schema_name: SchemaName,
726729
) -> superposition::Result<Json<ConfigVersion>> {
727730
let DbConnection(mut conn) = db_conn;
728731

729732
let config_version = config_versions::config_versions
730-
.schema_name(&schema_name)
733+
.schema_name(&workspace_request.schema_name)
731734
.find(version.into_inner())
732735
.get_result::<ConfigVersion>(&mut conn)?;
733736

0 commit comments

Comments
 (0)