Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions app/src/main/java/app/RootController.java
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,15 @@ public HttpResponse<String> indexXml(@Valid Pageable pageable,
return HttpResponse.ok(xmlMapper.writeValueAsString(serviceList));
}

@Get("/services/{serviceCode}/details{?jurisdiction_id}")
@Produces(MediaType.APPLICATION_JSON)
@ExecuteOn(TaskExecutors.IO)
public ServiceDTO getServiceJson(Long serviceCode,
@Nullable @QueryValue("jurisdiction_id") String jurisdiction_id) {

return serviceService.findService(serviceCode, jurisdiction_id);
}

@Get(uris = {"/services/{serviceCode}{?jurisdiction_id}", "/services/{serviceCode}.json{?jurisdiction_id}"})
@Produces(MediaType.APPLICATION_JSON)
@ExecuteOn(TaskExecutors.IO)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
@Singleton
public class SystemReservedGroupInitializer {

static final String SYSTEM_RESERVED = "System Reserved";
public static final String SYSTEM_RESERVED = "System Reserved";

private final JurisdictionRepository jurisdictionRepository;
private final ServiceGroupRepository serviceGroupRepository;
Expand Down
12 changes: 11 additions & 1 deletion app/src/main/java/app/service/service/ServiceService.java
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import app.service.SystemReservedGroupInitializer;
import jakarta.transaction.Transactional;
import java.util.Comparator;
import java.util.List;
Expand Down Expand Up @@ -97,7 +98,16 @@ public GroupNotFoundException(Long groupId) {
public List<ServiceDTO> findAll(String jurisdictionId) {
List<Service> servicePage = serviceRepository.findAllByJurisdictionIdOrderByOrderPosition(jurisdictionId);

return servicePage.stream().map(this::toServiceDTO).collect(Collectors.toList());
return servicePage.stream()
.filter(s -> !SystemReservedGroupInitializer.SYSTEM_RESERVED.equals(s.getServiceGroup().getName()))
.map(this::toServiceDTO)
.collect(Collectors.toList());
}

public ServiceDTO findService(Long serviceCode, String jurisdictionId) {
return serviceRepository.findById(serviceCode)
.map(this::toServiceDTO)
.orElseThrow(() -> new ServiceNotFoundException(serviceCode, jurisdictionId));
}

public ServiceDefinitionDTO getServiceDefinition(Long serviceCode, String jurisdictionId) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
import type { CreateServiceRequestUIParams } from './shared';
import messages from '$media/messages.json';
import { setUpAlertRole } from '$lib/utils/functions';
import { SYSTEM_RESERVED_GROUP_NAME } from '$lib/constants/photoVoice';

export let params: Partial<CreateServiceRequestUIParams>;

Expand All @@ -37,11 +36,10 @@
onMount(fetchServiceList);

function fetchServiceList() {
Promise.all([libre311.getServiceList(), libre311.getGroupList()])
.then(([services, groups]) => {
const reservedId = groups.find((g) => g.name === SYSTEM_RESERVED_GROUP_NAME)?.id;
const filtered = services.filter((s) => s.group_id !== reservedId);
serviceList = asAsyncSuccess(filtered);
libre311
.getServiceList()
.then((services) => {
serviceList = asAsyncSuccess(services);
})
.catch((err) => (serviceList = asAsyncFailure(err)));
}
Expand Down
10 changes: 10 additions & 0 deletions frontend/src/lib/services/Libre311/Libre311.ts
Original file line number Diff line number Diff line change
Expand Up @@ -633,6 +633,7 @@ type UpdateAttributesOrderParams = {
} & HasServiceCode;
export interface Libre311Service extends Open311Service {
getJurisdictionConfig(): JurisdictionConfig;
getService(params: HasServiceCode): Promise<Service>;
reverseGeocode(coords: L.PointTuple): Promise<ReverseGeocodeResponse>;
uploadImage(file: File): Promise<string>;
setAuthInfo(authInfo: UnityAuthLoginResponse | undefined): void;
Expand Down Expand Up @@ -683,6 +684,8 @@ const ROUTES = {
getJurisdictionConfig: '/config',
getServiceList: (params: HasJurisdictionId) =>
`/services?jurisdiction_id=${params.jurisdiction_id}`,
getService: (params: HasJurisdictionId & HasServiceCode) =>
`/services/${params.service_code}/details?jurisdiction_id=${params.jurisdiction_id}`,
getServiceDefinition: (params: HasJurisdictionId & HasServiceCode) =>
`/services/${params.service_code}?jurisdiction_id=${params.jurisdiction_id}`,
getServiceRequests: (qParams: URLSearchParams) => `/requests?${qParams.toString()}`,
Expand Down Expand Up @@ -982,6 +985,13 @@ export class Libre311ServiceImpl implements Libre311Service {
}
}

async getService(params: HasServiceCode): Promise<Service> {
const res = await this.axiosInstance.get<unknown>(
ROUTES.getService({ ...params, jurisdiction_id: this.jurisdictionId })
);
return ServiceSchema.parse(res.data);
}

async getServiceDefinition(params: HasServiceCode): Promise<ServiceDefinition> {
try {
const res = await this.axiosInstance.get<unknown>(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,10 @@ export class OfflineAwareLibre311Service implements Libre311Service {
return this.wrapped.getServiceList();
}

getService(params: HasServiceCode): Promise<Service> {
return this.wrapped.getService(params);
}

getServiceDefinition(params: HasServiceCode): Promise<ServiceDefinition> {
return this.wrapped.getServiceDefinition(params);
}
Expand Down
3 changes: 1 addition & 2 deletions frontend/src/routes/admin/system/+page.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -55,9 +55,8 @@
onMount(async () => {
try {
const photoVoiceCode = $jurisdiction.photo_voice_service_code;
const services = await service.getServiceList();
photoVoiceService = photoVoiceCode
? services.find((s) => s.service_code === photoVoiceCode)
? await service.getService({ service_code: photoVoiceCode })
: undefined;
if (photoVoiceService) {
nameText = photoVoiceService.service_name;
Expand Down
3 changes: 1 addition & 2 deletions frontend/src/routes/photo-voice/create/+page.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,7 @@
try {
const photoVoiceCode = $jurisdictionStore.photo_voice_service_code;
if (photoVoiceCode) {
const services = await libre311.getServiceList();
photoVoiceService = services.find((s) => s.service_code === photoVoiceCode);
photoVoiceService = await libre311.getService({ service_code: photoVoiceCode });
}
} catch (err) {
alertError(err);
Expand Down
Loading