Skip to content

A toolbox featuring a public chat and a dedicated exercise space. Streamline your development process and elevate your coding skills.

Notifications You must be signed in to change notification settings

catalina-macovei/Developer-Toolbox

Repository files navigation

Developer-Toolbox 🚀


Membrii echipei

  • Ciurescu Irina Alexandra

  • Macovei Cătălina

  • Stoinea Maria Miruna

  • Toma Alexandra

Instalare

Link-uri proiect

Demo: https://youtu.be/wtL93HdD8FU?si=qewP8Ewvj1DEg7ne

Trello Board: https://trello.com/invite/b/IkGNAbWn/ATTI8ac6152930936af6fce51826c086cd64D571E03D/proiect-mds-stack-overflow-developers-tool

Backend Server repository: https://github.com/catalina-macovei/backend-server

Repository pentru testele automate: https://github.com/stoineamiruna/Developer-ToolboxTests

User stories:

  • As an unregistred user, I want to see others' questions and answers.
  • As user, I want to login.
  • As user, I want to ask technical questions and receive answers.
  • As user, I want to answer others' questions.
  • As user, I want to have a profile.
  • As user, I want to rate questions and answers.
  • As user, I want to save questions and answers.
  • As user, I want to be notified when I receive an answer.
  • As user, I want to search a specific questions or a tag.
  • As user, I want to browse a variety of coding exercises
  • As user, I want to be able to select and attempt coding exercises directly within the app, with an integrated code editor.
  • As user, I want to track my progress and performance over time.
  • As a moderator, I want to manage the content and exercises available on the platform
  • As a moderator, I want to delete a post or a comment if it violates community guidelines.
  • As an administrator, I want to manage the content and exercises available on the platform
  • As an administrator, I want to delete a post or a comment if it violates community guidelines.
  • As an administrator, I want to manage user roles and account details.
  • As an administrator, I want the capability to delete user accounts.

Backlog creation:

Workflow Diagram

UML Diagram:

UML

Gantt Chart:

Gantt Chart

Workflow Diagram:

Workflow Diagram

Entity Relationship Diagram:

Workflow Diagram

Source control cu git

  • Branch Creation

    Am folosit o integration branch pentru feature-uri numita development. Celelalte feature branches au urmatoarea conventie de nume: T de la “task”, urmat de ora si data crearii branch-ului. Regula de denumire este utila in urmarirea progresului proiectului.

    Branches
  • Commits

    Commits
  • Git Conflicts and Merge

    Git Conflicts on Merge T10342905 into Development

    Merge Conflicts
    • Exercises Controller

      Vrem ambele versiuni: Test Cases si Solutions

      Merge Conflicts

      Versiunea finala

      Merge Conflicts
    • Exercises Show

      Alegem incoming

      Merge Conflicts

    Astfel, am rezolvat cele doua conflicte si acum putem apasa Accept Merge.

  • Pull requests

    Pull requests Pull requests

Teste Automate

  • Pachetele xUnit și Moq

    Ca parte a procesului de dezvoltare, am realizat testarea automată, folosind cadrul de testare xUnit, care este un instrument popular pentru testarea unităților în aplicațiile .NET. In plus, am folosit biblioteca Moq pentru a simula dependențele, lucru a permis testarea componentelor în izolare, fără a se baza pe servicii sau baze de date externe.

    Testare

  • Realizarea și verificarea testelor create

    Aplicarea Design Pattern-ului Repository

    Testare

    Crearea efectivă a testelor

    Testare

    Verificarea și rularea testelor

    Testare

Raportare bug si rezolvare cu pull request

Pull requests

Din backend server app:

Pull requests

Pull requests

Pull requests

Pull requests

Comentarii cod

Comentarii cod

Comentarii cod

Comentarii cod

Refactoring and code standards

  • Cod modular, variabile denumite corespunzator, lungime redusa a functiilor, cod documentat, exception handling

    Refactoring Refactoring Refactoring
  • Exemplu de refactoring

    Pentru testarea surselor trimise de utilizatori ca solutii la exercitiile de pe platforma, trebuie preluate in backend server test cases pentru exercitiul la care se face submit. Apoi acestea trebuie parsate, astfel incat sa fie extrase, pentru fiecare test case, inputul si outputul. Pe acestea le colectam intr-o structura de date care sa faciliteze accesul. Initial, am construit o functie prepare_test_cases care spargea continutul test case-ului (string) pentru a extrage informatiile necesare si pentru a face validarile. In acest caz, existau variabile care aveau unicul rol de a retine string-uri intermediare din parsare, iar validarea esua daca nu se respecta cu strictete formatul cerut (de ex, nu se acceptau mai multe linii goale intre teste). In urma unui refactoring, am optat pentru o functie mai clara si pentru o validare mai flexibila, folosing expresii regulate.

    Refactoring

Design Patterns

  1. Model-View-Controller (MVC) Pattern

    • Model: Reprezintă datele aplicației și logica de business. Modelele noastre sunt:
      • Answer
      • ApplicationUser
      • Bookmark
      • Category
      • Exercise
      • Question
      • QuestionTag
      • Reaction
      • Solution
      • Tag
    • View: Reprezintă interfața cu utilizatorul. Exemple de view-uri sunt:
      • Index
      • Edit
      • New
      • Show
    • Controller: Gestionază interacțiunile utilizatorului, manipulează modelul și returnează view-uri corespunzătoare.
  2. Repository Pattern

    • ApplicationDbContext: Acest context de bază de date acționează ca un repository pentru modelele tale, gestionând accesul la date și operațiile CRUD. Repository Pattern ajută la izolarea logicii de acces la date de restul aplicației, facilitând testarea și menținerea.
  3. Dependency Injection (DI)

    • Constructor Injection: Controllerele primesc ApplicationDbContext prin constructor. DI ajută la reducerea dependențelor hard-coded și crește testabilitatea și flexibilitatea aplicației.
  4. Unit of Work Pattern

    • ApplicationDbContext: Acționează adesea ca o unitate de lucru, asigurându-se că modificările aduse entităților sunt gestionate ca o singură tranzacție. Metoda SaveChanges aplică toate modificările la baza de date într-o singură tranzacție.
  5. ViewBag/TempData (State Management Patterns)

    • ViewBag și TempData: Sunt utilizate pentru a transfera date între controller și view sau între diferite request-uri.
  6. Builder Pattern

    • SeedData: Deși nu este un exemplu clasic al Builder Pattern, codul din SeedData pentru crearea și configurarea utilizatorilor poate fi văzut ca o formă simplificată a acestui pattern, unde obiectele complexe sunt construite pas cu pas.

AI Tools

 Pe parcursul dezvoltării proiectului, am utilizat instrumente AI precum ChatGPT și Microsoft Copilot. Am folosit în principal ChatGPT pentru a cere explicații și îndrumări în situații care ne depășeau cunoștințele, precum și pentru a ne ajuta să generăm teste mai rapid.

About

A toolbox featuring a public chat and a dedicated exercise space. Streamline your development process and elevate your coding skills.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •  

Languages