GStorage
Design docs (v1). This file = product/functional brief. The technical design derived from it lives alongside:
platform_design.md(architecture, schemas, flows),db_schema.md(DDL),../gstorage.jdl(entity model),sdk.md(SDK), andimplementation_plan.md(phased build).Positioning: GStorage is the gStack storage infrastructure layer — generic object store + open-data catalog + SDK. It sits beneath gdocs (gdocs stores its document blobs through GStorage); GStorage itself never signs or OCRs.
Stack (decided): JHipster microservices — a
gateway(Angular 19 UI + Spring Cloud Gateway) + agstoragebackend microservice + JHipster Registry (Eureka). Service alone = headless mode; gateway + service = full platform.
GStorage should be a PaaS in the gstack what could save and store files, images, text and soo one what could easily connect via api or via keycloak to other systems , or platforms. Acces unitar la seturi de date publice/private, centralizate prin Gstorage și generate de autoritățile și instituțiile statului sau de alte companii si necesitati ale business-ului in dependenta de utilizarea acestora. In cadrul utilizarii pentru platformele gstack ( se refera la insitutiile guvernamentale) informațiile guvernamentale cu caracter public sprijină transparența, inovația și deciziile informate ale cetățenilor și mediului de afaceri. Colecții de date publicate de instituțiile statului, disponibile gratuit pentru acces, descărcare și reutilizare în formate prelucrabile automat. Colecții de date publicate de alkte companii si institutii, disponibile gratuit pentru acces, descărcare și reutilizare în formate prelucrabile automat. Colecții de date private, disponibile pentru acces, descărcare și reutilizare în formate prelucrabile automat cu limitari de acces utilizare in cadrul platformei/microserviciului. Informații publice despre companii și entități juridice, datele cu acces autorizat sunt destinate participanților la schimbul de date (entități cu sisteme informaționale proprii, în sensul art. 3 al Legii nr. 142/2018). Conectarea se face prin platforma MConnect sau GConnect ( in cazul nostru GSSO sau keycloak) după procedura aprobată prin HG nr. 211/2019: cerere tipizată (set de date din Catalogul Semantic, temei legal, scop, contacte), semnată electronic. Persoanele fizice și organizațiile fără sistem informațional propriu pot solicita informații direct de la deținătorul registrului, în condițiile Legii nr. 148/2023 privind accesul la informațiile de interes public.
Cream o platforma care are in spate infrastuctura GStack , dar care la fel poate lucra autonom fiind un microserviciu precum GLOG, cu API, Autentificare si conexiune, fara admin board sau interfata UI. Poate fi conectata ca un simplu bloc la interfete sau proiecte autonome dar la fel poate fi conectata la infrastructura GSTACK interactionand cu alte SaaS-uri , PaaS-uri etc.
##Functional requirements
- 2 kind of system like in GLOG one for connection like a microservice without ui, second like with our gstack i8nfrastructure with ui , admin board keycloak and soo one.
- login page with 2 kind of login simple jwt or keycloac
- main ideea is to have a sistem with minio/s3bucket or something like this ( we are not sure it’s openm to you to propose )to save data , files and soo one and make like a storage shelf.
- Alarm - Gnotify connect is one way , another is a simple alarm sistem what can be parametrized via API or in the UI
- Loggin - Glog connect is also one way , another way is loging what also can be configured via API or in the UI/adminboard
- Archive like in glog with compressed files
- Scheduler - gscheduler ( when it will be writed)
- API to work / connect to other micropservices , services like SaaS, PaaS and soo one , not only from gstack
- SDK for easy future connection — official client libraries (Java + JS built & published to the GitLab registry, PHP designed) that wrap
/api/v1: auth (API key or Keycloak client-credentials), resumable upload/download, bucket/object ops, dataset publishing, pre-signed share links, search. So any gStack service (or external system) connects in one call. Seesdk.md. - documentation with instruction how to connect , how to work and how to configure etc
- GSSO or the connection with keycloak ( in our case is the same ) also it can be a connection to a local db, in order to save data for access through microservices by theirself
- Searching through file name, searching by a phrase or words what are in files
- Multiple SaaS, PaaS connection if it’s a part of infrastructure not a simple microservice to store something
- keep alive for the connection and the docker container and soo one
- restart always for containers\
- multiple nodes/workers replicas ( they should be scalable )
- supervisor for the nodes/workers
- load balancer between the nodes/workers
- retry and failing algorithm what should it do
- Protocol like fTP - file transfer protocol
- protocol to work via REST
- protocol what could transfer the files, also it should be possible to transfer just a part if the connection is lost during transfer and the possibility to continue from where we stoped
- Also protocols of microservices calls and file transfer
- duplicates in 2/3 replicas of the files ( or s3 buckets)
- soft delete
- backup of the buckets
- Date statistice organizate like csv , excell etc
- Date si fisiere organizate anual si in dependenta de emitent sau de grup-ul/ domeniul de care sunt coafiliate
- Filtre pe data, emitent, privat/public, grupa
- Acces , oferire acces , public privat and soo one
- Hash privbind integritatea datelor, criptografie pentru a securiza datele
- limitarea accesului si oferirea acestuia doar la citire sau la scriere si citire sau la salvare etc.
- explorarea fisierelor cu descarcare / fara descarcare
- grupare pe organizatii emitente ex ( FISC, Administratia de stat a drumurilor , moldsilva etc)
- organizare pe grupe sau domenii de lucru ( ex. agricultura , crime si justitie, cultura, energie, finante etc.)
- Board de administrare
- pagini pentru cautare publica a datelor publice
- Crearea automata a unei organizatii prin conectarea acesteia la PaaS in cazul utilizarii ca PaaS ( cu domeniu )
- Createa organizatiilor ca administrator
- crearea grupelor/ domeniilor
- filtre precum cuvinte cheie
- filtre privind formatele de documentatie
- posibilitatea de conectare la gsso sau gregistry etc.
- stilizarea in baza gstyle ca in cazul la restul platformelor serviciilor gstack
Decizii de design (v1)
Section titled “Decizii de design (v1)”Rezumatul deciziilor luate (detalii în platform_design.md):
| Temă | Decizie |
|---|---|
| Poziționare | Strat de infra sub gdocs: object-store generic + catalog open-data + SDK; fără semnare/OCR |
| Fundație | JHipster microservices (gateway UI + microserviciu gstorage + Registry/Eureka) |
| Model de date | Două straturi: fizic (Bucket + ObiectStocat + SesiuneTransfer) + catalog (Organizatie → Dataset → Resursa, Grup) |
| Object store | MinIO acum, în spatele driverului StorageBackend (S3-swappable); sha-256 + soft-delete + versionare + backup |
| Auth UI | Dual JWT + Keycloak (realm gstorage) |
| Auth mașină/SDK | Dual: client-credentials Keycloak (scope storage:* + tenant) sau cheie API locală (fără Keycloak) |
| Transfer | REST multipart + Range reluabil (download) + upload reluabil (SesiuneTransfer) + FTP/SFTP real (Apache MINA) |
| Căutare | Elasticsearch + worker Tika (text din interiorul fișierelor) + fațete |
| Integrări | Conectori GLog + GNotify (SDK) și built-in (Alarma engine + Eveniment audit append-only) |
| Scalare | RabbitMQ workeri + retry/DLQ; gateway+Eureka load-balancing; 2 replici gstorage; restart:always+healthcheck = supervizor |
| SDK | Java + JS reale (publicate), PHP proiectat |
Linkuri pentru exemplu real
Section titled “Linkuri pentru exemplu real”- https://date.gov.md/?culture=ru
- https://dataset.gov.md/ro/
- https://dataset.gov.md/ro/dataset/
- https://dataset.gov.md/ro/organization/
- https://dataset.gov.md/ro/organization/1006601004194
- https://dataset.gov.md/ro/group/
- https://dataset.gov.md/ro/group/2234-crime-si-justitie
- https://dataset.gov.md/ro/dataset/15905-lista-registratorilor-autorizati-ai-registrului-garantiilor-reale-mobiliare