Skip to content

Commit

Permalink
Merge pull request #2475 from zetkin/release-250117
Browse files Browse the repository at this point in the history
250117 Release
  • Loading branch information
richardolsson authored Jan 17, 2025
2 parents 6ffdd08 + 323e579 commit d513310
Show file tree
Hide file tree
Showing 159 changed files with 3,900 additions and 2,950 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/reusable-base.yml
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ jobs:
- name: Test
run: yarn ${{ inputs.yarn-test-script }}

- uses: actions/upload-artifact@v3
- uses: actions/upload-artifact@v4
if: always() && inputs.upload-path
with:
path: ${{ inputs.upload-path }}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import mongoose from 'mongoose';
import { NextRequest, NextResponse } from 'next/server';

import asOrgAuthorized from 'utils/api/asOrgAuthorized';
import { CanvassAssignmentModel } from 'features/canvassAssignments/models';
import { AreaAssignmentModel } from 'features/areaAssignments/models';

type RouteMeta = {
params: {
Expand All @@ -26,7 +26,7 @@ export async function DELETE(request: NextRequest, { params }: RouteMeta) {
apiClient;
orgId;

const assignmentModel = await CanvassAssignmentModel.findOne({
const assignmentModel = await AreaAssignmentModel.findOne({
_id: params.assignmentId,
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,26 +3,26 @@ import { NextRequest, NextResponse } from 'next/server';

import { AreaModel } from 'features/areas/models';
import {
CanvassAssignmentModel,
PlaceModel,
} from 'features/canvassAssignments/models';
AreaAssignmentModel,
LocationModel,
} from 'features/areaAssignments/models';
import {
AreaCardData,
AreaGraphData,
Household,
Visit,
ZetkinCanvassSession,
ZetkinPlace,
} from 'features/canvassAssignments/types';
import getAreaData from 'features/canvassAssignments/utils/getAreaData';
import isPointInsidePolygon from 'features/canvassAssignments/utils/isPointInsidePolygon';
ZetkinAreaAssignmentSession,
ZetkinLocation,
} from 'features/areaAssignments/types';
import getAreaData from 'features/areaAssignments/utils/getAreaData';
import isPointInsidePolygon from 'features/canvass/utils/isPointInsidePolygon';
import asOrgAuthorized from 'utils/api/asOrgAuthorized';
import { ZetkinPerson } from 'utils/types/zetkin';
import { ZetkinArea } from 'features/areas/types';

type RouteMeta = {
params: {
canvassAssId: string;
areaAssId: string;
orgId: string;
};
};
Expand All @@ -37,15 +37,15 @@ export async function GET(request: NextRequest, { params }: RouteMeta) {
async ({ apiClient, orgId }) => {
await mongoose.connect(process.env.MONGODB_URL || '');

const assignmentModel = await CanvassAssignmentModel.findOne({
_id: params.canvassAssId,
const assignmentModel = await AreaAssignmentModel.findOne({
_id: params.areaAssId,
}).lean();

if (!assignmentModel) {
return new NextResponse(null, { status: 404 });
}

const sessions: ZetkinCanvassSession[] = [];
const sessions: ZetkinAreaAssignmentSession[] = [];

for await (const sessionData of assignmentModel.sessions) {
const person = await apiClient.get<ZetkinPerson>(
Expand Down Expand Up @@ -92,8 +92,8 @@ export async function GET(request: NextRequest, { params }: RouteMeta) {
...new Map(areas.map((area) => [area.id, area])).values(),
];

const allPlaceModels = await PlaceModel.find({ orgId }).lean();
const allPlaces: ZetkinPlace[] = allPlaceModels.map((model) => ({
const allLocationModels = await LocationModel.find({ orgId }).lean();
const allLocations: ZetkinLocation[] = allLocationModels.map((model) => ({
description: model.description,
households: model.households,
id: model._id.toString(),
Expand All @@ -102,19 +102,19 @@ export async function GET(request: NextRequest, { params }: RouteMeta) {
title: model.title,
}));

type PlaceWithAreaId = ZetkinPlace & { areaId: ZetkinArea['id'] };
type LocationWithAreaId = ZetkinLocation & { areaId: ZetkinArea['id'] };

//Find places in the given areas
const placesInAreas: PlaceWithAreaId[] = [];
//Find locations in the given areas
const locationsInAreas: LocationWithAreaId[] = [];
uniqueAreas.forEach((area) => {
allPlaces.forEach((place) => {
const placeIsInArea = isPointInsidePolygon(
{ lat: place.position.lat, lng: place.position.lng },
allLocations.forEach((location) => {
const locationIsInArea = isPointInsidePolygon(
{ lat: location.position.lat, lng: location.position.lng },
area.points.map((point) => ({ lat: point[0], lng: point[1] }))
);

if (placeIsInArea) {
placesInAreas.push({ ...place, areaId: area.id });
if (locationIsInArea) {
locationsInAreas.push({ ...location, areaId: area.id });
}
});
});
Expand All @@ -127,12 +127,12 @@ export async function GET(request: NextRequest, { params }: RouteMeta) {
let firstVisit: Date = new Date();
let lastVisit: Date = new Date();

allPlaces.forEach((place) => {
const placeVisits = place.households
allLocations.forEach((location) => {
const locationVisits = location.households
.flatMap((household) => household.visits)
.filter((visit) => visit.canvassAssId === params.canvassAssId);
.filter((visit) => visit.areaAssId === params.areaAssId);

filteredVisitsInAllAreas.push(...placeVisits);
filteredVisitsInAllAreas.push(...locationVisits);
});

if (filteredVisitsInAllAreas.length > 0) {
Expand Down Expand Up @@ -167,18 +167,20 @@ export async function GET(request: NextRequest, { params }: RouteMeta) {
const areaVisitsData: AreaGraphData[] = [];
const householdList: Household[] = [];

allPlaces.forEach((place) => {
const placeIsInArea = isPointInsidePolygon(
{ lat: place.position.lat, lng: place.position.lng },
allLocations.forEach((location) => {
const locationIsInArea = isPointInsidePolygon(
{ lat: location.position.lat, lng: location.position.lng },
area.points.map((point) => ({ lat: point[0], lng: point[1] }))
);

if (placeIsInArea) {
const filteredHouseholds = place.households.filter((household) => {
return household.visits.filter(
(visit) => visit.canvassAssId === params.canvassAssId
);
});
if (locationIsInArea) {
const filteredHouseholds = location.households.filter(
(household) => {
return household.visits.filter(
(visit) => visit.areaAssId === params.areaAssId
);
}
);
householdList.push(...filteredHouseholds);
}
});
Expand All @@ -200,17 +202,17 @@ export async function GET(request: NextRequest, { params }: RouteMeta) {
});

//Visits outside assigned areas logic
const idsOfPlacesInAreas = new Set(
placesInAreas.map((place) => place.id)
const idsOfLocationsInAreas = new Set(
locationsInAreas.map((location) => location.id)
);
const placesOutsideAreas = allPlaces.filter(
(place) => !idsOfPlacesInAreas.has(place.id)
const locationsOutsideAreas = allLocations.filter(
(location) => !idsOfLocationsInAreas.has(location.id)
);

placesOutsideAreas.forEach((place) => {
place.households.forEach((household) => {
locationsOutsideAreas.forEach((location) => {
location.households.forEach((household) => {
household.visits.forEach((visit) => {
if (visit.canvassAssId == params.canvassAssId) {
if (visit.areaAssId == params.areaAssId) {
householdsOutsideAreasList.push(household);
}
});
Expand Down
Loading

0 comments on commit d513310

Please sign in to comment.