AilianceApi.kt 125 lignes · 4909 octets
package fr.ebii.card2vcf.sync

/** Contrat HTTP utilisé par [SyncEngine] ; [AilianceApiClient] l'implémente, fakes en test. */
interface AilianceApi {
    fun authCle(nom: String, motDePasse: String): AilianceApiClient.ApiResult<AuthCleResponse>

    fun syncStatus(sinceIso: String, ressourcesQuery: String? = null): AilianceApiClient.ApiResult<SyncStatusResponse>

    fun syncPull(sinceIso: String, ressourcesQuery: String? = null): AilianceApiClient.ApiResult<SyncPullResponse>

    fun createContact(jsonBody: String): AilianceApiClient.ApiResult<String>

    fun updateContact(id: String, jsonBody: String): AilianceApiClient.ApiResult<String>

    fun deleteContact(id: String): AilianceApiClient.ApiResult<Unit>

    fun createEntreprise(jsonBody: String): AilianceApiClient.ApiResult<String>

    fun updateEntreprise(id: String, jsonBody: String): AilianceApiClient.ApiResult<String>

    fun deleteEntreprise(id: String): AilianceApiClient.ApiResult<Unit>

    fun createProjet(jsonBody: String): AilianceApiClient.ApiResult<String>

    fun updateProjet(id: String, jsonBody: String): AilianceApiClient.ApiResult<String>

    fun deleteProjet(id: String): AilianceApiClient.ApiResult<Unit>

    fun createTache(projetId: String, jsonBody: String): AilianceApiClient.ApiResult<String>

    fun updateTache(projetId: String, tacheId: String, jsonBody: String): AilianceApiClient.ApiResult<String>

    fun deleteTache(projetId: String, tacheId: String): AilianceApiClient.ApiResult<Unit>

    fun moveTache(projetId: String, tacheId: String, jsonBody: String): AilianceApiClient.ApiResult<String>

    /**
     * Coche/décoche une sous-tâche. Route dédiée : le `PUT` général ne
     * transporte que des titres et ne peut donc pas basculer l'état `fait`.
     */
    fun toggleSousTache(
        projetId: String,
        tacheId: String,
        sousTacheId: String,
    ): AilianceApiClient.ApiResult<String>

    fun createInteraction(contactId: String, jsonBody: String): AilianceApiClient.ApiResult<String>

    fun deleteInteraction(iid: String): AilianceApiClient.ApiResult<Unit>

    fun relancerTranscriptionInteraction(contactServerId: String, iid: String): AilianceApiClient.ApiResult<Unit>

    fun relancerTranscriptionNote(projetServerId: String, nid: String): AilianceApiClient.ApiResult<Unit>

    fun listRdv(): AilianceApiClient.ApiResult<List<RendezVousDto>>

    fun createRdv(jsonBody: String): AilianceApiClient.ApiResult<String>

    fun getRdv(id: String): AilianceApiClient.ApiResult<RendezVousDto>

    fun updateRdv(id: String, jsonBody: String): AilianceApiClient.ApiResult<String>

    fun deleteRdv(id: String): AilianceApiClient.ApiResult<Unit>

    fun getRessourcesCatalogue(): AilianceApiClient.ApiResult<RessourcesCatalogueDto>

    fun listReservations(genre: String, resourceId: String): AilianceApiClient.ApiResult<List<ReservationDto>>

    fun createReservation(genre: String, resourceId: String, jsonBody: String): AilianceApiClient.ApiResult<String>

    fun updateReservation(
        genre: String,
        resourceId: String,
        reservationId: String,
        jsonBody: String,
    ): AilianceApiClient.ApiResult<String>

    fun deleteReservation(genre: String, resourceId: String, reservationId: String): AilianceApiClient.ApiResult<Unit>

    fun listIndisponibilites(genre: String, resourceId: String): AilianceApiClient.ApiResult<List<IndisponibiliteDto>>

    fun uploadContactCarte(
        id: String,
        bytes: ByteArray,
        filename: String,
        contentType: String = "image/jpeg",
    ): AilianceApiClient.ApiResult<String>

    fun uploadContactPhoto(
        id: String,
        bytes: ByteArray,
        filename: String,
        contentType: String = "image/jpeg",
    ): AilianceApiClient.ApiResult<String>

    fun downloadContactCarte(id: String): AilianceApiClient.ApiResult<ByteArray>

    fun downloadContactPhoto(id: String): AilianceApiClient.ApiResult<ByteArray>

    fun uploadInteractionAudio(
        contactId: String,
        iid: String,
        bytes: ByteArray,
        filename: String,
        contentType: String = "audio/wav",
    ): AilianceApiClient.ApiResult<String>

    fun downloadInteractionAudio(contactId: String, iid: String): AilianceApiClient.ApiResult<ByteArray>

    fun createNoteProjet(projetId: String, jsonBody: String): AilianceApiClient.ApiResult<String>

    fun updateNoteProjet(projetId: String, nid: String, jsonBody: String): AilianceApiClient.ApiResult<String>

    fun deleteNoteProjet(projetId: String, nid: String): AilianceApiClient.ApiResult<Unit>

    fun uploadNoteAudio(
        projetId: String,
        nid: String,
        bytes: ByteArray,
        filename: String,
        contentType: String = "audio/wav",
    ): AilianceApiClient.ApiResult<String>

    fun downloadNoteAudio(projetId: String, nid: String): AilianceApiClient.ApiResult<ByteArray>
}