Skip to content

Commit

Permalink
Adds geo-features.service.ts
Browse files Browse the repository at this point in the history
  • Loading branch information
alexeh committed Mar 6, 2024
1 parent b60e53d commit afe0fd5
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 5 deletions.
47 changes: 47 additions & 0 deletions api/src/modules/geo-regions/geo-features.service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import { Injectable } from '@nestjs/common';
import { DataSource, Repository, SelectQueryBuilder } from 'typeorm';
import { GeoRegion } from 'modules/geo-regions/geo-region.entity';
import { FeatureCollection, Feature } from 'geojson';
import {
GetEUDRFeaturesGeoJSONDto,
GetFeaturesGeoJsonDto,
} from 'modules/geo-regions/dto/get-features-geojson.dto';
import {
LOCATION_TYPES,
SourcingLocation,
} from 'modules/sourcing-locations/sourcing-location.entity';

@Injectable()
export class GeoFeaturesService extends Repository<GeoRegion> {
constructor(private dataSource: DataSource) {
super(GeoRegion, dataSource.createEntityManager());
}

async getGeoFeatures(): Promise<Feature[] | FeatureCollection> {
return null as any;
}

async getGeoJson(
dto?: GetEUDRFeaturesGeoJSONDto | GetFeaturesGeoJsonDto,
): Promise<any> {
const queryBuilder: SelectQueryBuilder<GeoRegion> =
this.createQueryBuilder('gr');
queryBuilder
.select(
'json_build_object(type, FeatureCollection, features, json_agg(ST_AsGeoJSON(gr.theGeom)::json))',
'geojson',
)
.innerJoin(SourcingLocation, 'sl', 'sl.geoRegionId = gr.id');
if (dto?.geoRegionIds) {
queryBuilder.where('gr.id IN (:...ids)', { ids: dto.geoRegionIds });
}

if (dto?.isEUDRRequested()) {
queryBuilder.andWhere('sl.locationType = :type', {
type: LOCATION_TYPES.EUDR,
});
}
const [qury, params] = queryBuilder.getQueryAndParameters();
return queryBuilder.getRawMany();
}
}
3 changes: 2 additions & 1 deletion api/src/modules/geo-regions/geo-regions.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import { GeoRegionRepository } from 'modules/geo-regions/geo-region.repository';
import { AdminRegionsModule } from 'modules/admin-regions/admin-regions.module';
import { MaterialsModule } from 'modules/materials/materials.module';
import { SuppliersModule } from 'modules/suppliers/suppliers.module';
import { GeoFeaturesService } from 'modules/geo-regions/geo-features.service';

@Module({
imports: [
Expand All @@ -16,7 +17,7 @@ import { SuppliersModule } from 'modules/suppliers/suppliers.module';
SuppliersModule,
],
controllers: [GeoRegionsController],
providers: [GeoRegionsService, GeoRegionRepository],
providers: [GeoRegionsService, GeoRegionRepository, GeoFeaturesService],
exports: [GeoRegionsService, GeoRegionRepository],
})
export class GeoRegionsModule {}
17 changes: 13 additions & 4 deletions api/src/modules/geo-regions/geo-regions.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,14 @@ import { GeoRegionRepository } from 'modules/geo-regions/geo-region.repository';
import { CreateGeoRegionDto } from 'modules/geo-regions/dto/create.geo-region.dto';
import { UpdateGeoRegionDto } from 'modules/geo-regions/dto/update.geo-region.dto';
import { LocationGeoRegionDto } from 'modules/geo-regions/dto/location.geo-region.dto';
import { GetSupplierByType } from '../suppliers/dto/get-supplier-by-type.dto';
import { Supplier } from '../suppliers/supplier.entity';
import { AdminRegionsService } from 'modules/admin-regions/admin-regions.service';
import { MaterialsService } from 'modules/materials/materials.service';
import { SupplierRepository } from 'modules/suppliers/supplier.repository';
import { GetEUDRGeoRegions } from './dto/get-geo-region.dto';
import { GetEUDRGeoRegions } from 'modules/geo-regions/dto/get-geo-region.dto';
import {
GetEUDRFeaturesGeoJSONDto,
GetFeaturesGeoJsonDto,
} from 'modules/geo-regions/dto/get-features-geojson.dto';
import { GeoFeaturesService } from 'modules/geo-regions/geo-features.service';

@Injectable()
export class GeoRegionsService extends AppBaseService<
Expand All @@ -30,6 +32,7 @@ export class GeoRegionsService extends AppBaseService<
protected readonly geoRegionRepository: GeoRegionRepository,
private readonly adminRegionService: AdminRegionsService,
private readonly materialsService: MaterialsService,
private readonly geoFeatures: GeoFeaturesService,
) {
super(
geoRegionRepository,
Expand Down Expand Up @@ -115,4 +118,10 @@ export class GeoRegionsService extends AppBaseService<

return this.geoRegionRepository.getGeoRegionsFromSourcingLocations(options);
}

async getGeoJson(
dto: GetFeaturesGeoJsonDto | GetEUDRFeaturesGeoJSONDto,
): Promise<any> {
return this.geoFeatures.getGeoJson(dto);
}
}

0 comments on commit afe0fd5

Please sign in to comment.