refactor: move sql into own file

This commit is contained in:
Max Hohlfeld 2025-07-14 15:16:41 +02:00
parent 10841d493f
commit c74716cc3a
4 changed files with 48 additions and 43 deletions

View File

@ -1,6 +1,6 @@
{ {
"db_name": "PostgreSQL", "db_name": "PostgreSQL",
"query": "select\n\tevent.starttimestamp,\n\tevent.endtimestamp,\n\tevent.amountofposten,\n event.voluntaryfuehrungsassistent,\n event.voluntarywachhabender,\n\tlocation.name as locationName,\n\tevent.name as eventName,\n\tarray (\n\tselect\n\t\trow (user_.name, assignment.function) ::simpleAssignment\n\tfrom\n\t\tassignment\n\tjoin availability on\n\t\tassignment.availabilityid = availability.id\n\tjoin user_ on\n\t\tavailability.userid = user_.id\n\twhere\n\t\tassignment.eventId = event.id) as \"assignments: Vec<SimpleAssignment>\",\n\t\tarray (\n\tselect\n\t\tvehicle.station || ' ' || vehicle.radiocallname\n\tfrom\n\t\tvehicleassignment\n\tjoin vehicle on\n\t\tvehicleassignment.vehicleId = vehicle.id\n\twhere\n\t\tvehicleassignment.eventId = event.id) as vehicles\nfrom\n\tevent\njoin location on\n\tevent.locationId = location.id\n where event.starttimestamp::date >= $1 and event.starttimestamp::date <= $2 and location.areaId = $3\n order by event.starttimestamp", "query": "SELECT\n event.starttimestamp,\n event.endtimestamp,\n event.amountofposten,\n event.voluntaryfuehrungsassistent,\n event.voluntarywachhabender,\n location.name AS locationName,\n event.name AS eventName,\n array (\n SELECT\n row (user_.name, assignment.function) ::simpleAssignment\n FROM\n assignment\n JOIN availability on\n assignment.availabilityid = availability.id\n JOIN user_ on\n availability.userid = user_.id\n WHERE\n assignment.eventId = event.id) AS \"assignments: Vec<SimpleAssignment>\",\n array (\n SELECT\n vehicle.station || ' ' || vehicle.radiocallname\n FROM\n vehicleassignment\n JOIN vehicle on\n vehicleassignment.vehicleId = vehicle.id\n WHERE\n vehicleassignment.eventId = event.id) AS vehicles\n FROM\n event\n JOIN location on\n event.locationId = location.id\n WHERE\n event.starttimestamp::date >= $1\n AND event.starttimestamp::date <= $2\n AND location.areaId = $3\n ORDER BY\n event.starttimestamp\n",
"describe": { "describe": {
"columns": [ "columns": [
{ {
@ -102,5 +102,5 @@
null null
] ]
}, },
"hash": "366b4004828057e3ab47704c4856ea4e41c92af0a388862f77c37ea611a5d193" "hash": "8a9f517c18b13e6cbf47404d69c2e1c59660250aa5d1074d4da9c0589d0a6bb3"
} }

View File

@ -0,0 +1,38 @@
SELECT
event.starttimestamp,
event.endtimestamp,
event.amountofposten,
event.voluntaryfuehrungsassistent,
event.voluntarywachhabender,
location.name AS locationName,
event.name AS eventName,
array (
SELECT
row (user_.name, assignment.function) ::simpleAssignment
FROM
assignment
JOIN availability on
assignment.availabilityid = availability.id
JOIN user_ on
availability.userid = user_.id
WHERE
assignment.eventId = event.id) AS "assignments: Vec<SimpleAssignment>",
array (
SELECT
vehicle.station || ' ' || vehicle.radiocallname
FROM
vehicleassignment
JOIN vehicle on
vehicleassignment.vehicleId = vehicle.id
WHERE
vehicleassignment.eventId = event.id) AS vehicles
FROM
event
JOIN location on
event.locationId = location.id
WHERE
event.starttimestamp::date >= $1
AND event.starttimestamp::date <= $2
AND location.areaId = $3
ORDER BY
event.starttimestamp

View File

@ -2,7 +2,7 @@ use chrono::{NaiveDate, NaiveDateTime};
use sqlx::{ use sqlx::{
PgPool, PgPool,
postgres::{PgHasArrayType, PgTypeInfo}, postgres::{PgHasArrayType, PgTypeInfo},
query, query_file,
}; };
use super::{Function, Result}; use super::{Function, Result};
@ -33,49 +33,16 @@ impl PgHasArrayType for SimpleAssignment {
} }
impl ExportEventRow { impl ExportEventRow {
pub async fn read_all_for_timerange_and_area( pub async fn read_all_by_timerange_and_area(
pool: &PgPool, pool: &PgPool,
time: (NaiveDate, NaiveDate), time: (NaiveDate, NaiveDate),
area: i32, area: i32,
) -> Result<Vec<ExportEventRow>> { ) -> Result<Vec<ExportEventRow>> {
let rows = query!( let rows = query_file!(
"select "sql/export_event_row/read_all_by_timerange_and_area.sql",
event.starttimestamp, time.0,
event.endtimestamp, time.1,
event.amountofposten, area
event.voluntaryfuehrungsassistent,
event.voluntarywachhabender,
location.name as locationName,
event.name as eventName,
array (
select
row (user_.name, assignment.function) ::simpleAssignment
from
assignment
join availability on
assignment.availabilityid = availability.id
join user_ on
availability.userid = user_.id
where
assignment.eventId = event.id) as \"assignments: Vec<SimpleAssignment>\",
array (
select
vehicle.station || ' ' || vehicle.radiocallname
from
vehicleassignment
join vehicle on
vehicleassignment.vehicleId = vehicle.id
where
vehicleassignment.eventId = event.id) as vehicles
from
event
join location on
event.locationId = location.id
where event.starttimestamp::date >= $1 and event.starttimestamp::date <= $2 and location.areaId = $3
order by event.starttimestamp",
time.0,
time.1,
area
) )
.fetch_all(pool) .fetch_all(pool)
.await?; .await?;

View File

@ -134,7 +134,7 @@ pub async fn get(
let area = query.area.unwrap_or(user.area_id); let area = query.area.unwrap_or(user.area_id);
let rows_to_export = ExportEventRow::read_all_for_timerange_and_area( let rows_to_export = ExportEventRow::read_all_by_timerange_and_area(
pool.get_ref(), pool.get_ref(),
(query.start, query.end), (query.start, query.end),
area, area,