All Downloads are FREE. Search and download functionalities are using the official Maven repository.

de.svws_nrw.data.lehrer.DataLehrerPersonalabschnittsdatenMinderleistungen Maven / Gradle / Ivy

Go to download

Diese Bibliothek unterstützt bei dem Zugriff auf Datenbanken für die Schulverwaltungssoftware in NRW

There is a newer version: 1.0.1
Show newest version
package de.svws_nrw.data.lehrer;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Function;

import de.svws_nrw.core.data.lehrer.LehrerPersonalabschnittsdatenAnrechnungsstunden;
import de.svws_nrw.core.types.lehrer.LehrerMinderleistungArt;
import de.svws_nrw.data.DataBasicMapper;
import de.svws_nrw.data.DataManager;
import de.svws_nrw.data.JSONMapper;
import de.svws_nrw.db.DBEntityManager;
import de.svws_nrw.db.dto.current.schild.lehrer.DTOLehrerEntlastungsstunde;
import de.svws_nrw.db.utils.ApiOperationException;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;
import jakarta.ws.rs.core.Response.Status;


/**
 * Diese Klasse erweitert den abstrakten {@link DataManager} für den
 * Core-DTO {@link LehrerPersonalabschnittsdatenAnrechnungsstunden}.
 */
public final class DataLehrerPersonalabschnittsdatenMinderleistungen extends DataManager {

	/**
	 * Erstellt einen neuen {@link DataManager} für den Core-DTO {@link LehrerPersonalabschnittsdatenAnrechnungsstunden}.
	 *
	 * @param conn       die Datenbank-Verbindung für den Datenbankzugriff
	 */
	public DataLehrerPersonalabschnittsdatenMinderleistungen(final DBEntityManager conn) {
		super(conn);
	}


	/**
	 * Lambda-Ausdruck zum Umwandeln eines Datenbank-DTOs {@link DTOLehrerEntlastungsstunde} in einen Core-DTO {@link LehrerPersonalabschnittsdatenAnrechnungsstunden}.
	 */
	private static final Function dtoMapper =
			(final DTOLehrerEntlastungsstunde dto) -> {
				final LehrerPersonalabschnittsdatenAnrechnungsstunden daten = new LehrerPersonalabschnittsdatenAnrechnungsstunden();
				daten.id = dto.ID;
				daten.idAbschnittsdaten = dto.Abschnitt_ID;
				daten.idGrund = LehrerMinderleistungArt.getByKuerzel(dto.EntlastungsgrundKrz).daten.id;
				daten.anzahl = (dto.EntlastungStd == null) ? 0.0 : dto.EntlastungStd;
				return daten;
			};

	@Override
	public Response getAll() {
		throw new UnsupportedOperationException();
	}

	@Override
	public Response getList() {
		throw new UnsupportedOperationException();
	}

	/**
	 * Ermittelt die Entlastungen für die Lehrerabschnittsdaten mit der angegebenen ID und und gibt diese zurück.
	 *
	 * @param conn                      die Datenbankverbindung
	 * @param idLehrerabschnittsdaten   die ID der Lehrerabschnittsdaten
	 *
	 * @return die Liste mit den Entlastungen
	 */
	public static List getByLehrerabschnittsdatenId(final DBEntityManager conn,
			final Long idLehrerabschnittsdaten) {
		final List result = new ArrayList<>();
		// Bestimme die Anrechungen für die Lehrerabschnittsdaten
		final List dtos = conn.queryList(DTOLehrerEntlastungsstunde.QUERY_BY_ABSCHNITT_ID,
				DTOLehrerEntlastungsstunde.class, idLehrerabschnittsdaten);
		if (dtos == null)
			return result;
		// Konvertiere sie und füge sie zur Liste hinzu
		for (final DTOLehrerEntlastungsstunde dto : dtos)
			result.add(dtoMapper.apply(dto));
		return result;
	}

	@Override
	public Response get(final Long id) throws ApiOperationException {
		if (id == null)
			throw new ApiOperationException(Status.NOT_FOUND);
		final DTOLehrerEntlastungsstunde dto = conn.queryByKey(DTOLehrerEntlastungsstunde.class, id);
		if (dto == null)
			throw new ApiOperationException(Status.NOT_FOUND);
		final LehrerPersonalabschnittsdatenAnrechnungsstunden daten = dtoMapper.apply(dto);
		return Response.status(Status.OK).type(MediaType.APPLICATION_JSON).entity(daten).build();
	}

	private final Map> patchMappings = Map.ofEntries(
			Map.entry("id", (conn, anrechnung, value, map) -> {
				final long patch_id = JSONMapper.convertToLong(value, false);
				if ((patch_id != anrechnung.ID))
					throw new ApiOperationException(Status.BAD_REQUEST);
			}),
			Map.entry("idAbschnittsdaten", (conn, anrechnung, value, map) -> {
				final long patch_id = JSONMapper.convertToLong(value, false);
				if (patch_id != anrechnung.Abschnitt_ID)
					throw new ApiOperationException(Status.BAD_REQUEST);
			}),
			Map.entry("idGrund", (conn, anrechnung, value, map) -> {
				final long idGrund = JSONMapper.convertToLong(value, false);
				final LehrerMinderleistungArt grund = LehrerMinderleistungArt.getByID(idGrund);
				if (grund == null)
					throw new ApiOperationException(Status.NOT_FOUND);
				anrechnung.EntlastungsgrundKrz = grund.daten.kuerzel;
			}),
			Map.entry("anzahl", (conn, anrechnung, value, map) -> {
				anrechnung.EntlastungStd = JSONMapper.convertToDouble(value, false);
			}));

	@Override
	public Response patch(final Long id, final InputStream is) throws ApiOperationException {
		return super.patchBasic(id, is, DTOLehrerEntlastungsstunde.class, patchMappings);
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy