Skip to content

Commit 0d2ec39

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

File tree

21 files changed

+459
-529
lines changed

21 files changed

+459
-529
lines changed

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: 42 additions & 37 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,21 +444,22 @@ 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> {
452+
let schema_name = &workspace_request.schema_name;
453+
445454
let DbConnection(mut conn) = db_conn;
446455
let is_approve = req
447456
.headers()
448457
.get("x-approve")
449458
.and_then(|value| value.to_str().ok().and_then(|s| s.parse::<bool>().ok()))
450459
.unwrap_or(false);
451460

452-
let dimensions_info_map = fetch_dimensions_info_map(&mut conn, &schema_name)?;
453-
let mut config = generate_cac(&mut conn, &schema_name)?;
461+
let dimensions_info_map = fetch_dimensions_info_map(&mut conn, schema_name)?;
462+
let mut config = generate_cac(&mut conn, schema_name)?;
454463
let default_config = (config.default_configs).clone();
455464
for (key, _) in default_config {
456465
let contexts = config.contexts;
@@ -465,12 +474,11 @@ async fn reduce_handler(
465474
&dimensions_info_map,
466475
default_config.clone(),
467476
is_approve,
468-
&schema_name,
469-
&workspace_settings,
477+
&workspace_request,
470478
)
471479
.await?;
472480
if is_approve {
473-
config = generate_cac(&mut conn, &schema_name)?;
481+
config = generate_cac(&mut conn, schema_name)?;
474482
}
475483
}
476484

@@ -480,10 +488,7 @@ async fn reduce_handler(
480488
#[cfg(feature = "high-performance-mode")]
481489
#[authorized]
482490
#[get("/fast")]
483-
async fn get_fast_handler(
484-
schema_name: SchemaName,
485-
state: Data<AppState>,
486-
) -> superposition::Result<HttpResponse> {
491+
async fn get_fast_handler(state: Data<AppState>) -> superposition::Result<HttpResponse> {
487492
use fred::interfaces::MetricsInterface;
488493

489494
log::debug!("Started redis fetch");
@@ -577,11 +582,11 @@ async fn get_handler(
577582
db_conn: DbConnection,
578583
dimension_params: DimensionQuery<QueryMap>,
579584
query_filters: superposition_query::Query<ConfigQuery>,
580-
workspace_context: WorkspaceContext,
585+
workspace_request: WorkspaceContext,
581586
) -> superposition::Result<HttpResponse> {
582587
let DbConnection(mut conn) = db_conn;
583588

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

@@ -595,12 +600,12 @@ async fn get_handler(
595600

596601
let query_filters = query_filters.into_inner();
597602
let mut version =
598-
get_config_version(&query_filters.version, &workspace_context, &mut conn)?;
603+
get_config_version(&query_filters.version, &workspace_request, &mut conn)?;
599604

600605
let mut config = generate_config_from_version(
601606
&mut version,
602607
&mut conn,
603-
&workspace_context.schema_name,
608+
&workspace_request.schema_name,
604609
)?;
605610

606611
config = apply_prefix_filter_to_config(&query_filters.prefix, config)?;
@@ -619,7 +624,7 @@ async fn get_handler(
619624

620625
let mut response = HttpResponse::Ok();
621626
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);
627+
add_audit_id_to_header(&mut conn, &mut response, &workspace_request.schema_name);
623628
add_config_version_to_header(&version, &mut response);
624629
Ok(response.json(config))
625630
}
@@ -636,12 +641,12 @@ async fn resolve_handler(
636641
db_conn: DbConnection,
637642
dimension_params: DimensionQuery<QueryMap>,
638643
query_filters: superposition_query::Query<ResolveConfigQuery>,
639-
workspace_context: WorkspaceContext,
644+
workspace_request: WorkspaceContext,
640645
) -> superposition::Result<HttpResponse> {
641646
let DbConnection(mut conn) = db_conn;
642647
let query_filters = query_filters.into_inner();
643648

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

@@ -650,11 +655,11 @@ async fn resolve_handler(
650655
}
651656

652657
let mut config_version =
653-
get_config_version(&query_filters.version, &workspace_context, &mut conn)?;
658+
get_config_version(&query_filters.version, &workspace_request, &mut conn)?;
654659
let mut config = generate_config_from_version(
655660
&mut config_version,
656661
&mut conn,
657-
&workspace_context.schema_name,
662+
&workspace_request.schema_name,
658663
)?;
659664
let (is_smithy, query_data) = setup_query_data(&req, &body, &dimension_params)?;
660665

@@ -664,41 +669,41 @@ async fn resolve_handler(
664669
merge_strategy,
665670
&mut conn,
666671
&query_filters,
667-
&workspace_context,
672+
&workspace_request,
668673
)?;
669674

670675
let mut resp = HttpResponse::Ok();
671676
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);
677+
add_audit_id_to_header(&mut conn, &mut resp, &workspace_request.schema_name);
673678
add_config_version_to_header(&config_version, &mut resp);
674679
Ok(resp.json(resolved_config))
675680
}
676681

677682
#[authorized]
678683
#[get("/versions")]
679684
async fn list_version_handler(
685+
workspace_request: WorkspaceContext,
680686
db_conn: DbConnection,
681687
filters: Query<PaginationParams>,
682-
schema_name: SchemaName,
683688
) -> superposition::Result<Json<PaginatedResponse<ConfigVersionListItem>>> {
684689
let DbConnection(mut conn) = db_conn;
685690

686691
if let Some(true) = filters.all {
687692
let config_versions = config_versions::config_versions
688-
.schema_name(&schema_name)
693+
.schema_name(&workspace_request.schema_name)
689694
.select(ConfigVersionListItem::as_select())
690695
.get_results(&mut conn)?;
691696
return Ok(Json(PaginatedResponse::all(config_versions)));
692697
}
693698

694699
let n_version: i64 = config_versions::config_versions
695700
.count()
696-
.schema_name(&schema_name)
701+
.schema_name(&workspace_request.schema_name)
697702
.get_result(&mut conn)?;
698703

699704
let limit = filters.count.unwrap_or(10);
700705
let mut builder = config_versions::config_versions
701-
.schema_name(&schema_name)
706+
.schema_name(&workspace_request.schema_name)
702707
.into_boxed()
703708
.order(config_versions::created_at.desc())
704709
.limit(limit);
@@ -720,14 +725,14 @@ async fn list_version_handler(
720725
#[authorized]
721726
#[get("/version/{version}")]
722727
async fn get_version_handler(
728+
workspace_request: WorkspaceContext,
723729
db_conn: DbConnection,
724730
version: Path<i64>,
725-
schema_name: SchemaName,
726731
) -> superposition::Result<Json<ConfigVersion>> {
727732
let DbConnection(mut conn) = db_conn;
728733

729734
let config_version = config_versions::config_versions
730-
.schema_name(&schema_name)
735+
.schema_name(&workspace_request.schema_name)
731736
.find(version.into_inner())
732737
.get_result::<ConfigVersion>(&mut conn)?;
733738

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

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,24 +36,24 @@ pub fn apply_prefix_filter_to_config(
3636
}
3737

3838
fn get_config_version_from_workspace(
39-
workspace_context: &WorkspaceContext,
39+
workspace_request: &WorkspaceContext,
4040
conn: &mut DBConnection,
4141
) -> Option<i64> {
4242
match workspaces::dsl::workspaces
4343
.select(workspaces::config_version)
4444
.filter(
4545
workspaces::organisation_id
46-
.eq(&workspace_context.organisation_id.0)
47-
.and(workspaces::workspace_name.eq(&workspace_context.workspace_id.0)),
46+
.eq(&workspace_request.organisation_id.0)
47+
.and(workspaces::workspace_name.eq(&workspace_request.workspace_id.0)),
4848
)
4949
.get_result::<Option<i64>>(conn)
5050
{
5151
Ok(version) => version,
5252
Err(e) => {
5353
log::error!(
5454
"Failed to get config_version for org_id: {}, workspace_name: {} — {:?}",
55-
workspace_context.organisation_id.0,
56-
workspace_context.workspace_id.0,
55+
workspace_request.organisation_id.0,
56+
workspace_request.workspace_id.0,
5757
e
5858
);
5959
None
@@ -63,11 +63,11 @@ fn get_config_version_from_workspace(
6363

6464
pub fn get_config_version(
6565
version: &Option<String>,
66-
workspace_context: &WorkspaceContext,
66+
workspace_request: &WorkspaceContext,
6767
conn: &mut DBConnection,
6868
) -> superposition::Result<Option<i64>> {
6969
version.as_ref().map_or_else(
70-
|| Ok(get_config_version_from_workspace(workspace_context, conn)),
70+
|| Ok(get_config_version_from_workspace(workspace_request, conn)),
7171
|version| {
7272
if *version == *"latest" {
7373
log::trace!("latest config request");
@@ -235,7 +235,7 @@ pub fn resolve(
235235
merge_strategy: Header<MergeStrategy>,
236236
conn: &mut DBConnection,
237237
query_filters: &ResolveConfigQuery,
238-
workspace_context: &WorkspaceContext,
238+
workspace_request: &WorkspaceContext,
239239
) -> superposition::Result<Map<String, Value>> {
240240
if let Some(context_id) = &query_filters.context_id {
241241
config.contexts = if let Some(index) = config
@@ -257,7 +257,7 @@ pub fn resolve(
257257
&config.dimensions,
258258
&query_data,
259259
conn,
260-
&workspace_context.schema_name,
260+
&workspace_request.schema_name,
261261
)?);
262262
}
263263

0 commit comments

Comments
 (0)