collect-rest
#############

Présentation
************

A faire

Packages:
*********

**fr.gouv.vitam.collect.dto** : contient les objets entrants et sortants du service web d'application.

**fr.gouv.vitam.collect.exception** : classes d'exceptions gérées par le module collecte.

**fr.gouv.vitam.collect.helpers** : classes gérant la structure des objets en interne du module collecte.

**fr.gouv.vitam.collect.model** : classes interne du module collecte.

**fr.gouv.vitam.collect.repository** : classes pour mapper les objets de la base de données.

**fr.gouv.vitam.collect.resource** : classe du controlleur REST qui contient les endpoints.

**fr.gouv.vitam.collect.server** : classes de lancement du serveur d'application.

**fr.gouv.vitam.collect.service** : classes fonctionnelles.

fr.gouv.vitam.collect.resource
**********************************

Rest API
--------

| https://vitam/collect/v1/transactions
| https://vitam/collect/v1/units
| https://vitam/collect/v1/objects/{usage}/{version}
| https://vitam/collect/v1/objects/{usage}/{version}/binary
| https://vitam/collect/v1/transactions/close
| https://vitam/collect/v1/transactions/send
| https://vitam/collect/v1/projects/{projectId}/binary
| https://vitam/collect/v1/projects/{projectId}/units

-TransactionResource.java
##########################

classe controlleur REST
La classe contient actuellement 6 méthodes :

1. initTransaction()

.. code-block:: java

   @Path("/transactions")
    @POST
    @Consumes(APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    @Secured(permission =  TRANSACTION_CREATE, description = "Créer une transaction")
    public Response initTransaction(TransactionDto transactionDto) {

  ....

2. uploadArchiveUnit()

	Ajouter une unité archivistique

 .. code-block:: java

   	@Path("/transactions/{transactionId}/units")
    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    @Secured(permission =  TRANSACTION_UNIT_CREATE, description = "Créer une unité archivistique")
    public Response uploadArchiveUnit(@PathParam("transactionId") String transactionId, JsonNode unitJsonNode) {

     ...

3. uploadObjectGroup()

    ajouter un object group a une unité archivistique
	NB : the post X-Http-Method-Override header

.. code-block:: java

  @Path("/units/{unitId}/objects/{usage}/{version}")
    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    @Secured(permission =  TRANSACTION_OBJECT_UPSERT, description = "ajouter ou modifier un objet group")
    public Response uploadObjectGroup(@PathParam("unitId") String unitId,
                                      @PathParam("usage") String usageString,
                                      @PathParam("version") Integer version,
                                      ObjectDto objectDto) {
  ...

4. upload()

	méthode pour uploader un binaire

.. code-block:: java

 	@Path("/units/{unitId}/objects/{usage}/{version}/binary")
    @POST
    @Consumes(MediaType.APPLICATION_OCTET_STREAM)
    @Produces(MediaType.APPLICATION_JSON)
    @Secured(permission =  TRANSACTION_BINARY_UPSERT, description = "ajouter ou modifier un binaire")
    public Response upload(@PathParam("unitId") String unitId,
                           @PathParam("usage") String usageString,
                           @PathParam("version") Integer version,
                           InputStream uploadedInputStream) throws CollectException {
   ...

5. closeTransaction()

  fermeture de la transaction

.. code-block:: java

  @Path("/transactions/{transactionId}/close")
    @POST
    @Consumes(APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    @Secured(permission =  TRANSACTION_CLOSE, description = "Fermer une transaction")
    public Response closeTransaction(@PathParam("transactionId") String transactionId) {
    ...

6. generateAndSendSip()

	génerer un SIP et l'envoyer a Vitam


.. code-block:: java

 	@Path("/transactions/{transactionId}/send")
    @POST
    @Consumes(APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    @Secured(permission =  TRANSACTION_SEND, description = "Envoyer une transaction")
    public Response generateAndSendSip(@PathParam("transactionId") String transactionId) {
     ...