Saltatu eduki nagusira

Firebase Data Connect

Firebase Data Connect GraphQL API bat kudeatutako PostgreSQL datu-base baten gainean erakusten duen Firebase zerbitzu bat da. Trainium-en Supabaseren backend osagarri gisa erabiltzen da zenbait eragiketetarako.

Konfigurazioa​

app/dataconnect/ direktorioa Data Connect konfigurazio artefaktuak ditu:

dataconnect/
├── dataconnect.yaml # Configuración del servicio
├── schema/
│ └── schema.gql # Definición del esquema de tipos
└── default_connector/
├── connector.yaml # Configuración del conector
└── queries.gql # Queries y mutaciones definidas

dataconnect.yaml​

Firebase proiektuaren izena, eskualdea eta Data Connect zerbitzuaren izena definitzen ditu. Konfiguratutako eskualdea europe-southwest1 da.

konektorea.yaml​

Lehenetsitako konektorearen izena definitzen du (default) eta queries.gql fitxategiko kontsultak konektore horrekin lotzen ditu.

GraphQL eskema (schema.gql)​

Eskemak Supabase taulei gutxi gorabehera sei mota nagusi definitzen ditu:

Makina mota​

type Maquinas @table(name: "MAQUINAS") {
id: Int!
nombre: String! @col(dataType: "varchar(100)")
tipo: String @col(dataType: "varchar(50)")
estado: Int! @default(value: 0)
descripcion: String @col(dataType: "text")
operativa: Int! @default(value: 1)
}

Erabiltzaile mota​

type Usuario @table(name: "USUARIO") {
id: Int!
nombre: String! @col(dataType: "varchar(100)")
dni: String @unique @col(dataType: "varchar(20)")
email: String @unique @col(dataType: "varchar(100)")
contraseniaHash: String @col(name: "CONTRASEÑA_HASH", dataType: "varchar(255)")
telefono: String @col(dataType: "varchar(20)")
premium: Boolean @default(value: false)
fechaIniPrem: Date @col(name: "FECHA_INI_PREM")
fechaFinPrem: Date @col(name: "FECHA_FIN_PREM")
fechaReg: Date! @col(name: "FECHA_REG") @default(expr: "request.time")
admin: Int! @default(value: 0)
}

Plater mota​

type Platos @table(name: "PLATOS") {
id: Int!
idUsuario: Usuario
nombre: String! @col(dataType: "varchar(100)")
descripcion: String @col(dataType: "text")
calorias: Float @col(name: "CALORIAS")
imagenUrl: String @col(name: "IMAGEN_URL", dataType: "varchar(255)")
fechaSubida: Date! @col(name: "FECHA_SUBIDA") @default(expr: "request.time")
visibilidad: Boolean @default(value: true)
}

Erreserba mota​

type Reservas @table(name: "RESERVAS") {
id: Int!
idUsuario: Usuario!
idMaquina: Maquinas!
fecha: Date
horaInicio: String @col(name: "HORA_INICIO", dataType: "time")
horaFin: String @col(name: "HORA_FIN", dataType: "time")
estado: Boolean @default(value: true)
}

IdatziUserWeight​

type PesoUsuario @table(name: "PESO_USUARIO") {
id: Int!
idUsuario: Usuario!
peso: Float! @col(name: "PESO")
fecha: Date
}

Ordainketa mota​

type Pagos @table(name: "PAGOS") {
id: Int!
idUsuario: Usuario!
monto: Int! @col(name: "monto", dataType: "bigint")
fechaPago: Date @col(name: "fecha_pago")
tipo: String @col(name: "tipo", dataType: "varchar(50)")
metodoPago: String @col(name: "metodo_pago", dataType: "varchar(25)")
}

Bezero HTTP (DataConnectClient.kt)​

Data Connect-ekin komunikazioak ez du erabiltzen Firebase SDK Android-erako, baizik eta DataConnectClient.kt-n inplementatutako eskuzko HTTP bezero bat. Singleton objektu honek POST eskaerak egiten dizkio Data Connect REST amaierako puntuari, kontsultaren gorputzarekin JSON formatuan.

object DataConnectClient {
private const val API_KEY = "..."
private const val APP_ID = "<app-id-de-ejemplo>..."
private const val ENDPOINT = "https://europe-southwest1-dataconnect.googleapis.com/v1beta/projects/tu-proyecto.../connectors/default:executeGraphql"

suspend fun execute(
query: String,
variables: Map<String, Any?> = emptyMap(),
operationName: String? = null
): JSONObject?
}

Google APIarekin autentifikazioa x-goog-api-key goiburua erabiliz egiten da. Amaiera puntuak eskualdeko europe-southwest1-dataconnect.googleapis.com azpidomeinua barne hartzen du, 404 erantzunak saihesteko beharrezkoa den zerbitzua eskualde zehatz batean zabaltzen denean.

execute metodoak erantzun osoaren JSONObject objektua edo null itzultzen du sareko errorea edo HTTP erantzuna arrakastatsua izan ezean. Deia Dispatchers.IO bidaltzailean exekutatzen da withContext erabiliz.