2026-04-07 12:52:55 +02:00
|
|
|
use contracts::ProfessionState;
|
|
|
|
|
use db::models::catering_service::CateringServiceProfile;
|
feat: add admin APIs for jobs, applications, and all 9 professions
- Companies service: add GET /api/admin/jobs and GET /api/admin/applications
- Gateway: route /api/admin/applications to companies; add routing for all 9 profession admin endpoints
- For each profession service (photographers, makeup_artists, tutors, developers, video_editors, graphic_designers, social_media_managers, fitness_trainers, catering_services):
- Create admin.rs with list and detail endpoints that join with users
- Update main.rs to mount admin router under /api/admin/<profession>
- Admin endpoints enable cross-platform visibility of all professionals by internal staff
2026-04-06 19:08:00 +02:00
|
|
|
use axum::{extract::{Path, State}, http::StatusCode, response::IntoResponse, routing::get, Json, Router};
|
|
|
|
|
use serde::Serialize;
|
|
|
|
|
use uuid::Uuid;
|
|
|
|
|
|
|
|
|
|
#[derive(Serialize)]
|
|
|
|
|
pub struct AdminCateringServiceList {
|
|
|
|
|
pub id: Uuid,
|
|
|
|
|
pub user_id: Uuid,
|
2026-04-07 12:52:55 +02:00
|
|
|
pub business_name: Option<String>,
|
feat: add admin APIs for jobs, applications, and all 9 professions
- Companies service: add GET /api/admin/jobs and GET /api/admin/applications
- Gateway: route /api/admin/applications to companies; add routing for all 9 profession admin endpoints
- For each profession service (photographers, makeup_artists, tutors, developers, video_editors, graphic_designers, social_media_managers, fitness_trainers, catering_services):
- Create admin.rs with list and detail endpoints that join with users
- Update main.rs to mount admin router under /api/admin/<profession>
- Admin endpoints enable cross-platform visibility of all professionals by internal staff
2026-04-06 19:08:00 +02:00
|
|
|
pub bio: Option<String>,
|
2026-04-07 12:52:55 +02:00
|
|
|
pub location: Option<String>,
|
|
|
|
|
pub status: String,
|
|
|
|
|
pub created_at: chrono::DateTime<chrono::Utc>,
|
|
|
|
|
pub updated_at: chrono::DateTime<chrono::Utc>,
|
feat: add admin APIs for jobs, applications, and all 9 professions
- Companies service: add GET /api/admin/jobs and GET /api/admin/applications
- Gateway: route /api/admin/applications to companies; add routing for all 9 profession admin endpoints
- For each profession service (photographers, makeup_artists, tutors, developers, video_editors, graphic_designers, social_media_managers, fitness_trainers, catering_services):
- Create admin.rs with list and detail endpoints that join with users
- Update main.rs to mount admin router under /api/admin/<profession>
- Admin endpoints enable cross-platform visibility of all professionals by internal staff
2026-04-06 19:08:00 +02:00
|
|
|
}
|
|
|
|
|
|
2026-04-07 12:52:55 +02:00
|
|
|
impl From<CateringServiceProfile> for AdminCateringServiceList {
|
|
|
|
|
fn from(p: CateringServiceProfile) -> Self {
|
|
|
|
|
Self {
|
|
|
|
|
id: p.id,
|
|
|
|
|
user_id: p.user_id,
|
|
|
|
|
business_name: p.business_name,
|
|
|
|
|
bio: p.bio,
|
|
|
|
|
location: p.location,
|
|
|
|
|
status: p.status,
|
|
|
|
|
created_at: p.created_at,
|
|
|
|
|
updated_at: p.updated_at,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
feat: add admin APIs for jobs, applications, and all 9 professions
- Companies service: add GET /api/admin/jobs and GET /api/admin/applications
- Gateway: route /api/admin/applications to companies; add routing for all 9 profession admin endpoints
- For each profession service (photographers, makeup_artists, tutors, developers, video_editors, graphic_designers, social_media_managers, fitness_trainers, catering_services):
- Create admin.rs with list and detail endpoints that join with users
- Update main.rs to mount admin router under /api/admin/<profession>
- Admin endpoints enable cross-platform visibility of all professionals by internal staff
2026-04-06 19:08:00 +02:00
|
|
|
|
2026-04-07 12:52:55 +02:00
|
|
|
pub fn router() -> Router<ProfessionState> {
|
feat: add admin APIs for jobs, applications, and all 9 professions
- Companies service: add GET /api/admin/jobs and GET /api/admin/applications
- Gateway: route /api/admin/applications to companies; add routing for all 9 profession admin endpoints
- For each profession service (photographers, makeup_artists, tutors, developers, video_editors, graphic_designers, social_media_managers, fitness_trainers, catering_services):
- Create admin.rs with list and detail endpoints that join with users
- Update main.rs to mount admin router under /api/admin/<profession>
- Admin endpoints enable cross-platform visibility of all professionals by internal staff
2026-04-06 19:08:00 +02:00
|
|
|
Router::new()
|
|
|
|
|
.route("/", get(list_catering_services))
|
|
|
|
|
.route("/{id}", get(get_catering_service))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async fn list_catering_services(
|
2026-04-07 12:52:55 +02:00
|
|
|
State(state): State<ProfessionState>,
|
feat: add admin APIs for jobs, applications, and all 9 professions
- Companies service: add GET /api/admin/jobs and GET /api/admin/applications
- Gateway: route /api/admin/applications to companies; add routing for all 9 profession admin endpoints
- For each profession service (photographers, makeup_artists, tutors, developers, video_editors, graphic_designers, social_media_managers, fitness_trainers, catering_services):
- Create admin.rs with list and detail endpoints that join with users
- Update main.rs to mount admin router under /api/admin/<profession>
- Admin endpoints enable cross-platform visibility of all professionals by internal staff
2026-04-06 19:08:00 +02:00
|
|
|
) -> Result<impl IntoResponse, (StatusCode, String)> {
|
|
|
|
|
let services = sqlx::query_as!(
|
2026-04-07 12:52:55 +02:00
|
|
|
CateringServiceProfile,
|
feat: add admin APIs for jobs, applications, and all 9 professions
- Companies service: add GET /api/admin/jobs and GET /api/admin/applications
- Gateway: route /api/admin/applications to companies; add routing for all 9 profession admin endpoints
- For each profession service (photographers, makeup_artists, tutors, developers, video_editors, graphic_designers, social_media_managers, fitness_trainers, catering_services):
- Create admin.rs with list and detail endpoints that join with users
- Update main.rs to mount admin router under /api/admin/<profession>
- Admin endpoints enable cross-platform visibility of all professionals by internal staff
2026-04-06 19:08:00 +02:00
|
|
|
r#"
|
2026-04-07 12:52:55 +02:00
|
|
|
SELECT id, user_id, business_name, bio, location, custom_data, status, created_at, updated_at
|
|
|
|
|
FROM catering_service_profiles
|
|
|
|
|
ORDER BY created_at DESC
|
feat: add admin APIs for jobs, applications, and all 9 professions
- Companies service: add GET /api/admin/jobs and GET /api/admin/applications
- Gateway: route /api/admin/applications to companies; add routing for all 9 profession admin endpoints
- For each profession service (photographers, makeup_artists, tutors, developers, video_editors, graphic_designers, social_media_managers, fitness_trainers, catering_services):
- Create admin.rs with list and detail endpoints that join with users
- Update main.rs to mount admin router under /api/admin/<profession>
- Admin endpoints enable cross-platform visibility of all professionals by internal staff
2026-04-06 19:08:00 +02:00
|
|
|
LIMIT 100
|
|
|
|
|
"#
|
|
|
|
|
)
|
|
|
|
|
.fetch_all(&state.pool)
|
|
|
|
|
.await
|
|
|
|
|
.map_err(|e| (StatusCode::INTERNAL_SERVER_ERROR, format!("DB error: {e}")))?;
|
|
|
|
|
|
2026-04-07 12:52:55 +02:00
|
|
|
let list: Vec<AdminCateringServiceList> = services.into_iter().map(|p| p.into()).collect();
|
|
|
|
|
Ok(Json(list))
|
feat: add admin APIs for jobs, applications, and all 9 professions
- Companies service: add GET /api/admin/jobs and GET /api/admin/applications
- Gateway: route /api/admin/applications to companies; add routing for all 9 profession admin endpoints
- For each profession service (photographers, makeup_artists, tutors, developers, video_editors, graphic_designers, social_media_managers, fitness_trainers, catering_services):
- Create admin.rs with list and detail endpoints that join with users
- Update main.rs to mount admin router under /api/admin/<profession>
- Admin endpoints enable cross-platform visibility of all professionals by internal staff
2026-04-06 19:08:00 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async fn get_catering_service(
|
2026-04-07 12:52:55 +02:00
|
|
|
State(state): State<ProfessionState>,
|
feat: add admin APIs for jobs, applications, and all 9 professions
- Companies service: add GET /api/admin/jobs and GET /api/admin/applications
- Gateway: route /api/admin/applications to companies; add routing for all 9 profession admin endpoints
- For each profession service (photographers, makeup_artists, tutors, developers, video_editors, graphic_designers, social_media_managers, fitness_trainers, catering_services):
- Create admin.rs with list and detail endpoints that join with users
- Update main.rs to mount admin router under /api/admin/<profession>
- Admin endpoints enable cross-platform visibility of all professionals by internal staff
2026-04-06 19:08:00 +02:00
|
|
|
Path(id): Path<Uuid>,
|
|
|
|
|
) -> Result<impl IntoResponse, (StatusCode, String)> {
|
|
|
|
|
let service = sqlx::query_as!(
|
2026-04-07 12:52:55 +02:00
|
|
|
CateringServiceProfile,
|
feat: add admin APIs for jobs, applications, and all 9 professions
- Companies service: add GET /api/admin/jobs and GET /api/admin/applications
- Gateway: route /api/admin/applications to companies; add routing for all 9 profession admin endpoints
- For each profession service (photographers, makeup_artists, tutors, developers, video_editors, graphic_designers, social_media_managers, fitness_trainers, catering_services):
- Create admin.rs with list and detail endpoints that join with users
- Update main.rs to mount admin router under /api/admin/<profession>
- Admin endpoints enable cross-platform visibility of all professionals by internal staff
2026-04-06 19:08:00 +02:00
|
|
|
r#"
|
2026-04-07 12:52:55 +02:00
|
|
|
SELECT id, user_id, business_name, bio, location, custom_data, status, created_at, updated_at
|
|
|
|
|
FROM catering_service_profiles
|
|
|
|
|
WHERE id = $1
|
feat: add admin APIs for jobs, applications, and all 9 professions
- Companies service: add GET /api/admin/jobs and GET /api/admin/applications
- Gateway: route /api/admin/applications to companies; add routing for all 9 profession admin endpoints
- For each profession service (photographers, makeup_artists, tutors, developers, video_editors, graphic_designers, social_media_managers, fitness_trainers, catering_services):
- Create admin.rs with list and detail endpoints that join with users
- Update main.rs to mount admin router under /api/admin/<profession>
- Admin endpoints enable cross-platform visibility of all professionals by internal staff
2026-04-06 19:08:00 +02:00
|
|
|
"#,
|
|
|
|
|
id
|
|
|
|
|
)
|
|
|
|
|
.fetch_optional(&state.pool)
|
|
|
|
|
.await
|
|
|
|
|
.map_err(|e| (StatusCode::INTERNAL_SERVER_ERROR, format!("DB error: {e}")))?;
|
|
|
|
|
|
|
|
|
|
match service {
|
2026-04-07 12:52:55 +02:00
|
|
|
Some(s) => Ok(Json(AdminCateringServiceList::from(s))),
|
|
|
|
|
None => Err((StatusCode::NOT_FOUND, "Catering Service not found".to_string())),
|
feat: add admin APIs for jobs, applications, and all 9 professions
- Companies service: add GET /api/admin/jobs and GET /api/admin/applications
- Gateway: route /api/admin/applications to companies; add routing for all 9 profession admin endpoints
- For each profession service (photographers, makeup_artists, tutors, developers, video_editors, graphic_designers, social_media_managers, fitness_trainers, catering_services):
- Create admin.rs with list and detail endpoints that join with users
- Update main.rs to mount admin router under /api/admin/<profession>
- Admin endpoints enable cross-platform visibility of all professionals by internal staff
2026-04-06 19:08:00 +02:00
|
|
|
}
|
|
|
|
|
}
|