It is necessary to develop an application for searching excursions, which will allow you to book a place for an excursion. The application must be able to select tours by filters.
- Application architecture: 3-level client-server (+ intermediate layer with repositories) (Scheme: https://www.figma.com/file/9wgYj9NBONd43Y6QrbwOsq/Untitled?node-id=0%3A1)
- Implement the application using .NET Core 6 and REST API technology
- There should be support for 2 types of roles: user and administrator
- For authentication use IdentityServer4 (https://identityserver4.readthedocs.io/en/latest/)
- Use DBMS to store data — Microsoft SQL Server
- To organize data access, use Entity Framework Core (mapping model classes to tables - Code First approach, Fluent API) (EF Core: https://docs.microsoft.com/en-us/ef/core/ Fluent API: https://docs.microsoft.com/en-us/ef/ef6/modeling/code-first/fluent/types-and-properties)
- Use Repository + Unit of Work patterns to work with data between business logic layer and database models (https://docs.microsoft.com/en-us/aspnet/mvc/overview/older-versions/getting-started-with-ef-5-using-mvc-4/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application)
- Data input must be checked for correctness. Validation is carried out using the FluentValidation library (https://docs.fluentvalidation.net/en/latest/)
- The interface must be built on the basis of a web application
- The home page contains a list of upcoming tours (execute a ban on the display of finished tours)
- There is also a text field and a search button on the page. According to the substring entered by the user, excursions are searched for by name
- Filtration. Filtration categories: city, price, dates (start/end), type of tour and transport. There is a button to reset filters and show filter results. If none of the categories is changed, the resulting query displays tours for all categories
- If the user is not logged in, the pages display the registration/authorization buttons
- After authorization, instead of the registration/authorization buttons, the user's personal account button is shown
- Excursion data output is displayed as cards with minimal information: name, route, dates, duration, price
- By clicking on the tour card, the user goes to a separate page of the tour, which contains full information about it. There is also a button for booking a place for this tour
- The personal account displays the username, as well as a list of booked excursions
- Administrator functionality. Deleting/adding/changing expeditions. Removing users. Changing or removing a booking
- Working with Application Documentation - Swagger Framework (https://docs.microsoft.com/en-us/aspnet/core/tutorials/web-api-help-pages-using-swagger?view=aspnetcore-6.0)
- Code reduction, entity mapping definition - AutoMapper tool (https://docs.automapper.org/en/stable/Getting-started.html)
- Functionality extension: the ability to add an excursion to favorites
- Adding sorting tours by price, duration and date