update README.md
continuous-integration/drone/push Build is passing Details

pull/4/head
root 1 year ago
parent d7e26c8932
commit 8ec8558275

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

@ -5,14 +5,27 @@
---
  ![Docker](https://img.shields.io/badge/Docker-2496ED.svg?style=for-the-badge&logo=Docker&logoColor=white)
  ![CSharp](https://img.shields.io/badge/C%20Sharp-239120.svg?style=for-the-badge&logo=C-Sharp&logoColor=white)
  ![Visual Studio](https://img.shields.io/badge/Visual%20Studio-5C2D91.svg?style=for-the-badge&logo=Visual-Studio&logoColor=white)
  ![Kotlin](https://img.shields.io/badge/Kotlin-7F52FF.svg?style=for-the-badge&logo=Kotlin&logoColor=white)
  ![PostgreSQL](https://img.shields.io/badge/PostgreSQL-4169E1.svg?style=for-the-badge&logo=PostgreSQL&logoColor=white)
  ![Swagger](https://img.shields.io/badge/Swagger-85EA2D.svg?style=for-the-badge&logo=Swagger&logoColor=black)
  ![.NET](https://img.shields.io/badge/.NET-512BD4.svg?style=for-the-badge&logo=dotnet&logoColor=white)
---
[Présentation](#api---all-in) | [Répartition du dépôt](#répartition-du-gitlab) | [Technologies](#technologies) | [Outils](#outils) | [Controllers](#controllers) | [Deploiement](#déploiement) | [Wiki](https://codefirst.iut.uca.fr/git/AllDev/Gestion_de_projet/wiki)
</div>
### API - ALL IN !
*Contexte* : Api pour le projet universitaire de troisieme année (B.U.T Informatique de Clermont-Ferrand) nommé **All In**.
**Contexte** : Api pour le projet universitaire de troisieme année (B.U.T Informatique de Clermont-Ferrand) intitulé *All In*.
</br>
**Description** : Ce dépôt contient l'ensemble du code de l'API pour la partie back-end de l'application *ALL IN* et la connexion à la base de données.
</br>
**Utilité**:information_source: : Son rôle est de simplifier le processus de développement des interfaces clients d'*All In*, que ce soit pour les applications iOS, Android ou tout autre futur client.
</br>
# Répartition du gitlab
@ -20,127 +33,69 @@
[**Documentation**](Documentation) : **Documentation de l'application**
👉 [**Solution de l'application**](Sources/AllIn.sln)
## Diagramme de classes du modèle
```mermaid
classDiagram
direction LR;
class LargeImage{
+/Base64 : string
}
class User{
+/ Id : string
+/ Pseudo : string
+/ Mail : string
+/ Password : string
+ CreationDate : DateTime
+ AllCoins : int
~ AddGroup(group : Group) bool
~ RemoveGroup(group : Group) bool
}
User --> "1" LargeImage : Image
Group --> "1" LargeImage : Image
class Bet{
+/ Id : string
+/ Title : string
+/ Name : string
+/ Choices : List<string>
+/ Theme: string
+/ Status: bool
+ Description : string
+ StartDate : DateTime
+ EndDate : DateTime
}
Bet --> "*" User : Dictionary~User,Mise~
class Mise{
+ Cost : int
+ Choice : string
}
class Group{
+/ Id : string
+/ Name : string
+ CreationDate : DateTime
}
User --> "*" Group : groups
```
## Diagramme de classes du modèle
```mermaid
classDiagram
direction LR;
class IGenericDataManager~T~{
<<interface>>
GetNbItems() Task~int~
GetItems(index : int, count : int, orderingPropertyName : string?, descending : bool) Task~IEnumerable~T~~
GetItemById(id: string)
GetNbItemsByName(substring : string)
GetItemsByName(substring : string, index : int, count : int, orderingPropertyName : string?, descending : bool) Task~IEnumerable~T~~
UpdateItem(oldItem : T, newItem : T) Task~T~~
AddItem(item : T) Task~T~
DeleteItem(item : T) Task~bool~
}
class IUsersManager{
<<interface>>
GetItemByMail(mail : string)
GetNbItemsByGroup(group : Group)
GetItemsByGroup(group : Group, index : int, count : int, orderingPropertyName : string?, descending : bool) Task~IEnumerable~T~~
GetNbItemsByAllCoins(allCoins : int)
GetItemsByAllCoins(allCoins : int, index : int, count : int, orderingPropertyName : string?, descending : bool) Task~IEnumerable~T~~
}
class IBetsManager{
<<interface>>
GetNbItemsByUser(user : User?)
GetItemsByUser(user : User?, index : int, count : int, orderingPropertyName : string?, descending : bool) Task~IEnumerable~Bet?~~
GetNbItemsByDescription(description : string)
GetItemsByDescription(description : string, index : int, count : int, orderingPropertyName : string?, descending : bool) Task~IEnumerable~Bet?~~
}
class IGroupsManager{
<<interface>>
}
IGenericDataManager~User?~ <|.. IUsersManager : T--User?
IGenericDataManager~Bet?~ <|.. IBetsManager : T--Bet?
IGenericDataManager~Group?~ <|.. IGroupsManager : T--Group?
class IDataManager{
<<interface>>
}
IUsersManager <-- IDataManager : UsersMgr
IBetsManager <-- IDataManager : BetsMgr
IGroupsManager <-- IDataManager : GroupsMgr
```
## Diagramme de classes simplifié du Stub
```mermaid
classDiagram
direction TB;
IDataManager <|.. StubData
UsersManager ..|> IUsersManager
StubData --> UsersManager
BetsManager ..|> IBetsManager
StubData --> BetsManager
GroupsManager ..|> IGroupsManager
StubData --> GroupsManager
StubData --> "*" User
StubData --> "*" Bet
StubData --> "*" Group
```
# Technologies
<div style="display: flex; align-items: center;">
<img src="Documentation/Images/Ktor.png" style="width: 50px; margin-right: 10px;">
<h3 style="margin-bottom: 30px;">KTOR</h3>
</div>
</br>
- Nous avons opté pour le framework Ktor afin de développer l'API, en raison des nombreux avantages qu'il offre. Parmi ceux-ci, on peut citer sa facilité de prise en main, sa légèreté en termes de code, son utilisation d'un langage moderne (*Kotlin*), ainsi qu'une documentation détaillée et complète du framework.
<div style="display: flex; align-items: center;">
<img src="Documentation/Images/PostgreSQL.png" style="width: 50px; margin-right: 10px;">
<h3 style="margin-bottom: 30px;">PostgreSQL</h3>
</div>
- Pour stocker les données des utilisateurs et des paris, nous utilisons une base de données PostgreSQL sur laquelle l'API s'appuie pour récupérer et enregistrer des données. En raison de sa conformité aux dernières normes SQL, garantissant une compatibilité et une évolutivité optimales, ainsi que de son efficacité à gérer un grand nombre de données.
</br>
# Outils
Pour la partie API nous avons utilisés plusieurs outils :
### Swagger
L'utilisation d'un Swagger dans le développement d'une API facilite la gestion, la documentation et la compréhension des endpoints, optimisant ainsi le processus de création et favorisant une collaboration efficace entre les équipes.
</br>
Lien vers le Swagger de l'API All In : [Swagger All IN]()
### JWT
Pour renforcer la sécurité en permettant une authentification et une autorisation fiables, nous utilisons la bibliothèque JWT (JSON Web Tokens). Cela garantit l'intégrité des données échangées et facilite la gestion efficace et décentralisée des sessions utilisateur.
### DTO et Mapper
Afin de garantir la sécurité des échanges d'informations entre notre application et la base de données, nous avons utiliser des mappers et des DTO.
Ils sont essentiels pour une transmission sécurisée des données entre les différentes couches de l'application.
Contribuent ainsi à maintenir l'intégrité et la cohérence des données tout au long du processus.
# Controllers
Notre API est organisée en utilisant une séparation logique des routes par le biais de controllers.
Deux controllers principaux structurent notre application :
### Controller User :walking:
Ce controller est dédié à l'authentification et aux données liées à l'utilisateur.
### Controller BET :money_with_wings:
Le controller BET gère toutes les opérations liées aux paris. Il permet de récupérer, ajouter, modifier et supprimer des paris.
:white_check_mark: Cette séparation permet une gestion plus claire et modulaire des fonctionnalités de l'API, facilitant la maintenance et l'extension de notre système.
# Déploiement
Le déploiement est réalisé sur Code First via les services **Drone** et **Runner** ! :rocket:
Lien de l'API sur codefirst : [API All In](https://codefirst.iut.uca.fr/containers/AllDev-api)
<div align = center>
<div align = right>
<a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/4.0/"><img alt="Licence Creative Commons" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-nd/4.0/88x31.png" /></a>
<right>
© AllDev - API
</div>
Loading…
Cancel
Save