Talk about it. Learn about it.
- π Features
- π How to Run
- π οΈ Technologies and Design Patterns
- π¦ Nuget Packages
- π ER Diagram
- πΈ Screenshots
- πͺͺ License
If you find this project useful or interesting, please consider giving it a star. Thank you! π€
- Threaded Q&A: Ask questions, get answers, and engage in deep, organized discussions.
- Real-Time Alerts: Stay updated with instant and email notifications on thread activity.
- PDF Export: Download full discussions with user and question details for offline access.
- Excel Export: Export user data in spreadsheet format.
- Secure Access: Role-based authorization ensure a safe, controlled environment.
- Clean UI: Modern, user-friendly design thatβs intuitive and distraction-free.
- .NET 8 SDK (or higher)
- Microsoft SQL Server
- JetBrains Rider (edu), Visual Studio, or VS Code
git clone https://github.com/Raofin/TopicTalks
The project is configured to automatically apply migrations with some seed data on its first run. To create a database with dummy data, including the beautiful user portraits and question covers, execute the TopicTalks.sql script. You can manually apply migrations using the following commands:
- For Package Manager π
Update-Database -Context AppDbContext -Project TopicTalks.Infrastructure -StartupProject TopicTalks.Api
- For CLI π
dotnet ef database update --project TopicTalks.Infrastructure/TopicTalks.Infrastructure.csproj --startup-project TopicTalks.Api/TopicTalks.Api.csproj
π» Useful Commands
Add-Migration Init -Context AppDbContext -Project TopicTalks.Infrastructure -StartupProject TopicTalks.Api
Remove-Migration -Project TopicTalks.Infrastructure -StartupProject TopicTalks.Api -Force
Update-Database -Context AppDbContext -Project TopicTalks.Infrastructure -StartupProject TopicTalks.Api
Update-Database -Migration Init -Context AppDbContext -Project TopicTalks.Infrastructure -StartupProject TopicTalks.Api
To use Gmail's smtp server, you will need to use an app password. Note that this requires having 2-step verification enabled in your account.
Use the following Commands to store the credentials in user secrets π
dotnet user-secrets --project src/TopicTalks.Api set "EmailSettings:Email" "you@gmail.com"
dotnet user-secrets --project src/TopicTalks.Api set "EmailSettings:Password" "app-password"
If your SQL server is running on a different port, set the server and port as well accordingly.
β
Free forever.
After researching free cloud storage options, Google Drive storage through Google Cloud seemed to be the best fit for this project. With the limited resources available on the internet for interacting with the Google Drive APIs, it took me a while to understand andΒ implement the functionalities.
However, in order for the project to run with full functionality, you'll need to have your own Google Drive API credentials inserted in the GoogleCredentials.json.Β Here are the steps to follow to create a free Google Cloud project and get the credentials
- Create a project in the Google Cloud Console
- Enable Google Drive API for the project
- Select
Create Credentials
- Select
Application Data
-> ClickNext
- Fill out the details -> Select
Owner
in Role -> ClickDone
- Go to Service Accounts -> Select the newly created service account
- Select
Keys
-> ClickAdd Key
-> Choose JSON -> ClickCreate
(The credentialsjson
file should be automatically downloaded)
- Open the file and copy the value of
client_email
- Go to Google Drive -> Create a folder named
TopicTalks
- Share the folder with the
client_email
and General Access toAnyone with the link
- Finally, paste everything from the downloaded
json
file into GoogleCredentials.json - Star this project
cd TopicTalks/src
dotnet build TopicTalks.Api/TopicTalks.Api.csproj
dotnet build TopicTalks.Web/TopicTalks.Web.csproj
dotnet run --project TopicTalks.Api/TopicTalks.Api.csproj --urls "https://localhost:9998"
dotnet run --project TopicTalks.Web/TopicTalks.Web.csproj --urls "https://localhost:9999"
- API: https://localhost:9998
- Web: https://localhost:9999
- ASP.NET Core 8.0 Web API
- ASP.NET Core 8.0 MVC
- Entity Framework Core 8.0
- Microsoft SQL Server
- jQuery
- jQuery Validate
- Bootstrap 5
- Popper.js
- Tippy.js
- FontFace Observer
- Clean Architecture π¦Ύ
- Result Pattern
- Database Code First Approach with Fluent API
- Repository Pattern
- Unit of Work (UoW)
Package Name | Used to π |
---|---|
Swashbuckle | Generate API documentation from Web API controllers |
ErrorOr | Handle errors and return results efficiently |
Serilog | Log events in a very structured way |
FluentValidation | Apply server-side data validation rules |
FluentEmail | Send emails using SMTP servers |
Google Apis | Interact with cloud storage |
RazorTemplating | Render .cshtml files into string |
DinkToPdf | Generate beautiful PDFs from HTML |
ClosedXML | Generate Excel (.xlsx ) files |
WebOptimizer | Bundle and minify CSS & JavaScript files for faster loading |
WebMarkupMin | Minify MVC HTML content to reduce file size for improved performance |
View at π be.net/TopicTalks
Distributed under the BSD 3-Clause License. See LICENSE for more information.