We can see below service example step by step:
--Open Visual Studio 2022 & give the name as 'DotNetCoreWebAPI'
-I-Then create 'Models' folder>>ProjectInfo.cs add below code snippet
using MongoDB.Bson.Serialization.Attributes;
using MongoDB.Bson;
namespace DotNetCoreWebAPI.Models
{
    public class ProjectInfo
    {
        [BsonId]
        [BsonRepresentation(BsonType.ObjectId)]
        public string? _id { get; set; }
        public int ProjID { get; set; }
        //[BsonElement("Name")]
        public string ProjName { get; set; }
        public string ProjType { get; set; }
        public int __v { get; set; }
    }
}
-II-Then create 'Models' folder>>ProjectInfoDatabaseSettings.cs add below code snippet
namespace DotNetCoreWebAPI.Models
{
    public class ProjectInfoDatabaseSettings
    {
        public string ConnectionString { get; set; } = null!;
        public string DatabaseName { get; set; } = null!;
        public string ProjectInfoCollectionName { get; set; } = null!;
    }
}
-III-Then create 'Services' folder>>ProjectInfoService.cs add below code snippet
using DotNetCoreWebAPI.Models;
using Microsoft.Extensions.Options;
using MongoDB.Driver;
namespace DotNetCoreWebAPI.Services
{
    public class ProjectInfoService
    {
        private readonly IMongoCollection<ProjectInfo> _projectinfoCollection;
        public ProjectInfoService(
        IOptions<ProjectInfoDatabaseSettings> projinfoDatabaseSettings)
        {
            var mongoClient = new MongoClient(
                projinfoDatabaseSettings.Value.ConnectionString);
            var mongoDatabase = mongoClient.GetDatabase(
                projinfoDatabaseSettings.Value.DatabaseName);
            _projectinfoCollection = mongoDatabase.GetCollection<ProjectInfo>(
                projinfoDatabaseSettings.Value.ProjectInfoCollectionName);
        }
        public async Task<List<ProjectInfo>> GetAsync() =>
        await _projectinfoCollection.Find(_ => true).ToListAsync();
        public async Task<ProjectInfo?> GetAsync(string id) =>
        await _projectinfoCollection.Find(x => x._id == id).FirstOrDefaultAsync();
        public async Task CreateAsync(ProjectInfo newProjectInfo) =>
        await _projectinfoCollection.InsertOneAsync(newProjectInfo);
        public async Task UpdateAsync(string id, ProjectInfo updatedProjectInfo) =>
        await _projectinfoCollection.ReplaceOneAsync(x => x._id == id, updatedProjectInfo);
        public async Task RemoveAsync(string id) =>
        await _projectinfoCollection.DeleteOneAsync(x => x._id == id);
    }
}
-IV-Then in 'appsettings.json' add below code snippet
{
  "ABCBuildersDatabase": {
    "ConnectionString": "mongodb://localhost:27017",
    "DatabaseName": "ABCBuilders",
    "ProjectInfoCollectionName": "ProjectInfo"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*"
}
-V-Then in Controller folder>> 'ProjectInfoController.cs'  add below code snippet
using DotNetCoreWebAPI.Models;
using DotNetCoreWebAPI.Services;
using Microsoft.AspNetCore.Mvc;
namespace DotNetCoreWebAPI.Controllers
{
    [ApiController]
    [Route("api/[controller]")]
    public class ProjectInfoController : ControllerBase
    {
        private readonly ProjectInfoService _projinfoService;
        public ProjectInfoController(ProjectInfoService piService) =>
            _projinfoService = piService;
        [HttpGet]
        public async Task<List<ProjectInfo>> Get() =>
        await _projinfoService.GetAsync();
        [HttpGet("{id:length(24)}")]
        public async Task<ActionResult<ProjectInfo>> Get(string id)
        {
            var projI = await _projinfoService.GetAsync(id);
            if (projI is null)
            {
                return NotFound();
            }
            return projI;
        }
        [HttpPost]
        public async Task<IActionResult> Post(ProjectInfo newProjectInfo)
        {
            await _projinfoService.CreateAsync(newProjectInfo);
            return CreatedAtAction(nameof(Get), new { id = newProjectInfo._id }, newProjectInfo);
        }
        [HttpPut("{id:length(24)}")]
        public async Task<IActionResult> Update(string id, ProjectInfo updatedProjectInfo)
        {
            var pi = await _projinfoService.GetAsync(id);
            if (pi is null)
            {
                return NotFound();
            }
            updatedProjectInfo._id= pi._id;
            await _projinfoService.UpdateAsync(id, updatedProjectInfo);
            return NoContent();
        }
        [HttpDelete("{id:length(24)}")]
        public async Task<IActionResult> Delete(string id)
        {
            var book = await _projinfoService.GetAsync(id);
            if (book is null)
            {
                return NotFound();
            }
            await _projinfoService.RemoveAsync(id);
            return NoContent();
        }
    }
}
-VI-Then at last configure services in 'Program.cs' file
using DotNetCoreWebAPI.Models;
using DotNetCoreWebAPI.Services;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.Configure<ProjectInfoDatabaseSettings>(
    builder.Configuration.GetSection("ABCBuildersDatabase"));
builder.Services.AddSingleton<ProjectInfoService>();
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
--Then Build and Run the application to check the services using Swagger as well as in Postman
 
No comments:
Post a Comment