WorkSwap on alusta lisätyön, palveluiden, tuotteiden ja ansioluetteloiden etsimiseen.
Tämä repositorio sisältää WorkSwap-alustan backend-osan. Backend on toteutettu Javalla ja Spring Bootilla, ja se on rakennettu vertikaalista arkkitehtuuria käyttäväksi monimoduuliseksi Maven-projektiksi.
Frontend ja muut WorkSwap-ekosysteemin osat sijaitsevat erillisissä repositorioissa.
Frontend-repo: https://github.com/salavion/WorkSwapFrontend
-
Java 21
-
Spring Boot
- Spring Web
- Spring Security
- Spring Data JPA
- Spring OAuth2
- Spring WebSocket
- Spring RabbitMQ
-
Hibernate
-
MySQL / MariaDB
-
RabbitMQ
Käyttäjien ja järjestelmän tiedostojen tallennukseen käytetään Cloudflare R2 -objektitallennusta.
- Maven
- Multi-module Maven project
Sovellukset otetaan käyttöön Dockerin avulla.
Backend käyttää vertikaalista arkkitehtuuria (Vertical Slice Architecture).
Projektia ei ole jaettu ainoastaan teknisten kerrosten perusteella, vaan toiminnallisuus on organisoitu erillisiin toimialueisiin. Jokainen toimialue sisältää siihen liittyvät komponentit ja liiketoimintalogiikan.
Projekti on myös monimoduulinen Maven-projekti. Sovellukset koostetaan uudelleenkäytettävistä moduuleista.
Projektin pääasiallinen rakenne:
/
├── apps/
│ ├── server/
│ ├── sso/
│ └── statistic/
│
├── domains/
│ ├── category/
│ ├── chat/
│ ├── forum/
│ ├── listing/
│ ├── location/
│ ├── notification/
│ ├── order/
│ ├── review/
│ ├── statistic/
│ ├── subscription/
│ ├── task/
│ └── user/
│
└── infrastructure/
├── datasource/
├── security/
├── sso-security-core/
├── shared/
├── storage/
└── webflux/
Hakemisto /apps/ sisältää suoritettavat sovellukset.
Molemmat sovellukset käyttävät tarvittavia toimialue- ja infrastruktuurimoduuleja Maven-riippuvuuksina.
WorkSwapin pääasiallinen backend-sovellus.
Server toimii alustan pääasiallisena API-sovelluksena ja vastaa asiakaspyyntöjen käsittelystä sekä liiketoimintalogiikan suorittamisesta.
Käytetyt teknologiat:
- Spring Boot
- Spring Web
- Spring Security
- Spring Data JPA
- Spring OAuth2
- Spring WebSocket
- Spring AMQP
- Hibernate
- MySQL / MariaDB
- RabbitMQ
Päätehtävät:
- REST API -pyyntöjen käsittely;
- autentikointi ja autorisointi;
- käyttäjien hallinta;
- ilmoitusten hallinta;
- tilausten käsittely;
- arvostelujen hallinta;
- chat-toiminnallisuus;
- ilmoitusten käsittely;
- tilausten ja tilaustietojen hallinta;
- foorumin toiminnallisuus;
- muiden toimialueiden käsittely;
- tiedostojen hallinta Cloudflare R2 -tallennuksessa;
- viestien välitys RabbitMQ:n kautta;
- WebSocket-yhteyksien käsittely.
Erillinen sovellus tilastotietojen käsittelyä varten.
Statistic käyttää statistic-toimialuemoduulia sekä tarvittavia infrastruktuurimoduuleja.
Sovelluksen päätehtävänä on alustan tilastotietojen käsittely ja tallennus sekä analytiikkaan liittyvien toimintojen suorittaminen.
Muiden järjestelmän komponenttien kanssa kommunikointiin käytetään RabbitMQ:ta.
Hakemisto /domains/ sisältää järjestelmän toimialuekohtaiset moduulit.
Jokainen moduuli edustaa erillistä liiketoiminta-aluetta ja kapseloi siihen liittyvän liiketoimintalogiikan.
Ilmoitusten ja muiden alustan kategorioiden hallinta.
Keskustelujen ja käyttäjien välisen viestinnän toiminnallisuus.
Foorumin ja siihen liittyvien entiteettien toiminnallisuus.
Ilmoitusten hallinta.
Sisältää ilmoitusten luomisen, muokkaamisen, julkaisemisen, hakemisen ja muut ilmoituksiin liittyvät toiminnot.
Alustan käyttämien maantieteellisten sijaintien hallinta.
Käyttäjien ilmoitusten hallinta.
Tilausten ja niihin liittyvien toimintojen hallinta.
Käyttäjien kirjoittamien arvostelujen hallinta.
Tilastoihin ja analytiikkaan liittyvä liiketoimintalogiikka.
Käyttäjien tilausten ja niihin liittyvien toimintojen hallinta.
Tehtävien ja niihin liittyvien toimintojen hallinta.
Käyttäjien, heidän tietojensa ja niihin liittyvien entiteettien hallinta.
Hakemisto /infrastructure/ sisältää tekniset moduulit, joita toimialuemoduulit ja sovellukset käyttävät.
Infrastruktuurikomponentit eivät kuulu tiettyyn liiketoiminta-alueeseen, vaan tarjoavat järjestelmän tarvitsemia yleisiä teknisiä toimintoja.
Tietokantayhteyksistä ja tietokantaan liittyvistä komponenteista vastaava moduuli.
Sisältää MySQL / MariaDB -tietokantojen ja Hibernateen liittyvän toiminnallisuuden.
Sovelluksen tietoturvasta vastaava moduuli.
Sisältää yleiset komponentit, jotka liittyvät:
- Spring Securityyn;
- OAuth2:een;
- autentikointiin;
- autorisointiin;
- tokenien käsittelyyn;
- API:n suojaamiseen.
Projektin eri moduulien yhteiset komponentit.
Moduuli on tarkoitettu komponenteille, jotka eivät kuulu tiettyyn toimialueeseen tai yksittäiseen infrastruktuurimekanismiin.
Tiedostojen tallennukseen liittyvät abstraktiot ja toteutukset.
Moduulia käytetään Cloudflare R2 -objektitallennuksen kanssa kommunikointiin.
Spring WebFlux -reaktiiviseen HTTP-teknologiaan liittyvät yhteiset komponentit.
Projekti käyttää Maven Multi-Module Architecture -rakennetta.
Hakemiston /apps/ sovellukset eivät sisällä kaikkea liiketoimintalogiikkaa itse. Ne koostetaan erillisistä toimialue- ja infrastruktuurimoduuleista.
Moduulien väliset varsinaiset riippuvuudet määritellään projektin Maven-konfiguraatiossa.
Tämä rakenne mahdollistaa:
- toimialueiden eristämisen;
- toimialuemoduulien uudelleenkäytön eri sovelluksissa;
- liiketoimintalogiikan ja infrastruktuurin erottamisen;
- moduulien välisen riippuvuuden vähentämisen;
- sovellusten koostamisen ainoastaan tarvittavista moduuleista;
- projektin eri osien itsenäisemmän kehittämisen.
Backend kommunikoi useiden ulkoisten infrastruktuuripalveluiden kanssa.
Projektin pääasiallinen relaatiotietokanta.
Tietokannan kanssa työskentelyyn käytetään:
- Spring Data JPA:ta;
- Hibernatea.
RabbitMQ:ta käytetään asynkroniseen viestien välitykseen ja sovellusten väliseen kommunikointiin.
Sitä käytetään erityisesti Server- ja Statistic-sovellusten väliseen tiedonsiirtoon.
Cloudflare R2 toimii projektin objektitallennuksena.
Sitä käytetään tiedostoille, joita ei ole tarkoituksenmukaista tallentaa suoraan relaatiotietokantaan.
Sovellukset suoritetaan Docker-konteissa.
Molemmat sovellukset voidaan rakentaa ja käynnistää itsenäisesti niiden Maven-moduulien ja Docker-konfiguraation mukaisesti.
Projektissa käytetään kahta erillistä tietokantaa, joilla on eri käyttötarkoitukset.
Pääasiallinen tietokanta sisältää WorkSwapin ydintiedot ja sovelluksen päivittäiseen toimintaan tarvittavat tiedot.
Tietokantaan tallennetaan esimerkiksi:
- käyttäjät ja heidän asetuksensa;
- ilmoitukset;
- kategoriat ja sijainnit;
- tilaukset;
- arvostelut;
- viestit ja chatit;
- ilmoitukset;
- muut sovelluksen päätoiminnallisuuteen liittyvät tiedot.
Tätä tietokantaa käytetään pääasiassa Server-sovelluksen kautta.
Erillinen tietokanta on tarkoitettu tilastoille, analytiikalle sekä suurille tietomäärille, joita ei ole tarkoituksenmukaista säilyttää pääasiallisessa tietokannassa.
Se sisältää esimerkiksi:
- ilmoitusten katselutapahtumia;
- tilastollisia snapshot-tietoja;
- käyttäjien aktiivisuuteen liittyviä tietoja;
- muita analytiikkaan liittyviä tapahtuma- ja historiatietoja.
Tilastotietokannassa voidaan säilyttää huomattavasti yksityiskohtaisempaa ja suurempaa tietomäärää kuin pääasiallisessa tietokannassa. Tällaiset tiedot ovat hyödyllisiä analytiikkaa varten, mutta eivät välttämättä ole tarpeellisia yksittäisen pääentiteetin päivittäisessä käsittelyssä.
Statistic-sovellus vastaa tämän tietokannan käsittelystä ja analytiikan muodostamisesta.
Tietokantojen erottaminen vähentää pääasiallisen tietokannan kuormitusta ja mahdollistaa suurten analytiikka- ja historiatietomäärien käsittelyn vaikuttamatta merkittävästi sovelluksen päätoimintoihin.
Projekti on aktiivisessa kehityksessä.
Uusia toiminnallisuuksia ja muutoksia lisätään projektin kehittymisen myötä.