1. Architecture Overview

Tech Stack

2. Project Structure

/eShopApp
  /client      (Next.js frontend)
  /server      (ASP.NET Core backend)
  /mongodb     (MongoDB instance via Docker or Atlas)

3. Frontend – Next.js + Tailwind Setup

4. Backend – ASP.NET Core + MongoDB

Setup

  1. Create a Web API project.
    dotnet new webapi -n server
    cd server
    
  2. Install the MongoDB driver.
    dotnet add package MongoDB.Driver
    

/Models/Product.cs

using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;

namespace server.Models
{
    public class Product
    {
        [BsonId]
        [BsonRepresentation(BsonType.ObjectId)]
        public string Id { get; set; } = "";

        public string Name { get; set; } = "";
        public decimal Price { get; set; }
    }
}

/Services/ProductService.cs

using server.Models;
using MongoDB.Driver;
namespace server.Services
{
    public class ProductService
    {
        private readonly IMongoCollection<Product> _products;
        public ProductService(IConfiguration config)
        {
            var client = new MongoClient(config.GetConnectionString("MongoDb"));
            var database = client.GetDatabase("eShopDb");
            _products = database.GetCollection<Product>("Products");
        }
        public List<Product> Get() => 
            _products.Find(p => true).ToList();
        public Product Create(Product product)
        {
            _products.InsertOne(product);
            return product;
        }
    }
}

/Controllers/ProductsController.cs

using server.Models;
using MongoDB.Driver;
namespace server.Services
{
    public class ProductService
    {
        private readonly IMongoCollection<Product> _products;
        public ProductService(IConfiguration config)
        {
            var client = new MongoClient(config.GetConnectionString("MongoDb"));
            var database = client.GetDatabase("eShopDb");
            _products = database.GetCollection<Product>("Products");
        }
        public List<Product> Get() => 
            _products.Find(p => true).ToList();
        public Product Create(Product product)
        {
            _products.InsertOne(product);
            return product;
        }
    }
}

Program.cs

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddControllers();
builder.Services.AddSingleton<ProductService>();

builder.Services.AddCors(options =>
{
    options.AddDefaultPolicy(policy =>
        policy.AllowAnyOrigin()
              .AllowAnyHeader()
              .AllowAnyMethod());
});

var app = builder.Build();

// Configure the HTTP request pipeline.
app.UseCors();
app.MapControllers();
app.Run();

appsettings.json

{
  "ConnectionStrings": {
    "MongoDb": "mongodb://localhost:27017"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information"
    }
  }
}

5. MongoDB Setup (Local or Docker)

Docker Command

docker run -d -p 27017:27017 --name mongo mongo

6. Running the App

7. Optional Features