A. srv / sincroniza.php

1<?php
2
3require_once __DIR__ . "/../lib/php/recuperaJson.php";
4require_once __DIR__ . "/../lib/php/devuelveJson.php";
5require_once __DIR__ . "/../lib/php/ProblemDetails.php";
6require_once __DIR__ . "/../lib/php/devuelveProblemDetails.php";
7require_once __DIR__ . "/../lib/php/devuelveErrorInterno.php";
8require_once __DIR__ . "/modelo/Pasatiempo.php";
9require_once __DIR__ . "/modelo/recuperaPasatiempo.php";
10require_once __DIR__ . "/bd/pasatiempoAgrega.php";
11require_once __DIR__ . "/bd/pasatiempoBusca.php";
12require_once __DIR__ . "/bd/pasatiempoConsultaNoEliminados.php";
13require_once __DIR__ . "/bd/pasatiempoModifica.php";
14
15try {
16
17 $lista = recuperaJson();
18
19 if (!is_array($lista)) {
20 $lista = [];
21 }
22
23 foreach ($lista as $objeto) {
24
25 $modeloEnElCliente = recuperaPasatiempo($objeto);
26 $modeloEnElServidor = pasatiempoBusca($modeloEnElCliente->uuid);
27
28 if ($modeloEnElServidor === false) {
29
30 /* CONFLICTO. El objeto no ha estado en el servidor.
31 * AGREGARLO solamente si no está eliminado. */
32 if (!$modeloEnElCliente->eliminado) {
33 pasatiempoAgrega($modeloEnElCliente);
34 }
35 } elseif (
36 !$modeloEnElServidor->eliminado && $modeloEnElCliente->eliminado
37 ) {
38
39 /* CONFLICTO. El registro está en el servidor, donde no se ha
40 * eliminado, pero ha sido eliminado en el cliente.
41 * Gana el cliente, porque optamos por no revivir lo que se ha
42 * borrado. */
43 pasatiempoModifica($modeloEnElCliente);
44 } else if (
45 !$modeloEnElCliente->eliminado && !$modeloEnElServidor->eliminado
46 ) {
47
48 /* CONFLICTO. El registro está tanto en el servidor como en el
49 * cliente. Los datos pueden ser diferentes.
50 * PREVALECE LA FECHA MÁS GRANDE. Cuando gana el servidor no se
51 * hace nada.*/
52 if (
53 $modeloEnElCliente->modificacion > $modeloEnElServidor->modificacion
54 ) {
55 // La versión del cliente es más nueva y prevalece.
56 pasatiempoModifica($modeloEnElCliente);
57 }
58 }
59 }
60
61 $lista = pasatiempoConsultaNoEliminados();
62
63 devuelveJson($lista);
64} catch (ProblemDetails $details) {
65
66 devuelveProblemDetails($details);
67} catch (Throwable $error) {
68
69 devuelveErrorInterno($error);
70}
71
skip_previous skip_next