• "Clean Architecture: A Craftsmans Guide to Software Structure and Design" - Robert C. Martin (Uncle Bob)
  • Agar sizning ilovingiz mikroservislar uslubida yaratilgan bolsa, bu kitob sizga uning arxitekturasi, testlash, monitoring va boshqa muammolarni tahlil qilishda yordam bera oladi.
  • DDD prinsiplarini tushunish va ularga amal qilish yordamida, ichki dorixona ilovalarini dizayn qilishda yordam bera oladi.
  • Ushbu kitob, ASP.NET Core ilovasini bir nechta sprintlar orqali yaratishning jarayonini toliq va tafsilotli tarzda taqqoslashni oz ichiga oladi.
  • Ushbu kitob, ASP.NET Core frameworkining qanday ishlashini, tashqi interfeysni yaratishni va ma'lumotlar bazasidan foydalanishni o'rgatadi




    Download 256.98 Kb.
    bet13/13
    Sana16.12.2023
    Hajmi256.98 Kb.
    #120621
    1   ...   5   6   7   8   9   10   11   12   13
    Bog'liq
    Azatboyev Asror Individual loyiha

    Ushbu kitob, ASP.NET Core frameworkining qanday ishlashini, tashqi interfeysni yaratishni va ma'lumotlar bazasidan foydalanishni o'rgatadi.
    "Pro ASP.NET Core Identity" - Adam Freeman
    Identitiy tizimini yaxshi tushunish va uning ASP.NET Core ilovalariga qanday integratsiya qilinishini o'rgatish uchun bu kitobni o'qishingiz mumkin.
    "Clean Architecture: A Craftsman's Guide to Software Structure and Design" - Robert C. Martin (Uncle Bob)
    Bu kitob, toza arxitekturaga asoslangan loyihalarni yaratish, yaxshi dasturlash amaliyotlari va texnik tushunchalarni o'rgatadi.
    "Building Microservices: Designing Fine-Grained Systems" - Sam Newman
    Agar sizning ilovingiz mikroservislar uslubida yaratilgan bo'lsa, bu kitob sizga uning arxitekturasi, testlash, monitoring va boshqa muammolarni tahlil qilishda yordam bera oladi.
    "Domain-Driven Design: Tackling Complexity in the Heart of Software" - Eric Evans
    DDD prinsiplarini tushunish va ularga amal qilish yordamida, ichki dorixona ilovalarini dizayn qilishda yordam bera oladi.
    "ASP.NET Core Application Development: Building an application in four sprints" - James Chambers, David Paquette, Simon Timms
    Ushbu kitob, ASP.NET Core ilovasini bir nechta sprintlar orqali yaratishning jarayonini to'liq va tafsilotli tarzda taqqoslashni o'z ichiga oladi.
    Bu adabiyotlar, ASP.NET Core va ichki dorixona ilovalarini yaratishda yordam bera olish uchun yaxshi boshlang'ich nuqtalardir. Ilovangizning maxsus talablari va o'lchamlari bo'yicha qo'llanishda, boshqa texnologiyalardan, online resurslardan va forumlardan foydalanishingiz muhim bo'ladi.



    Web api Ilova Kodi


    using CrudforMedicshop.Application.Interfaces;
    using CrudforMedicshop.Domain.Entities;
    using CrudforMedicshop.infrastructure.Dbcontext;
    using CrudforMedicshop.infrastructure.Repositories;
    using CrudforMedicshop.infrastructure.Services;
    using Microsoft.EntityFrameworkCore;
    using CrudforMedicshop.Application;
    using CrudforMedicshop.Application.mapping;
    using Microsoft.AspNetCore.RateLimiting;
    using CrudforMedicshop.Application.Validation;
    using FluentValidation.AspNetCore;
    using FluentValidation;
    using System.Threading.RateLimiting;
    using Microsoft.Extensions.Options;
    using Microsoft.AspNetCore.Authentication.JwtBearer;
    using Microsoft.IdentityModel.Tokens;
    using System.Text;


    namespace CrudforMedicshop
    {
    public class Program
    {
    public static void Main(string[] args)
    {
    var builder = WebApplication.CreateBuilder(args);
    AppContext.SetSwitch("Npgsql.EnableLegacyTimestampBehavior", true);
    builder.Services.AddControllers();
    builder.Services.AddEndpointsApiExplorer();
    builder.Services.AddSwaggerGen();
    builder.Services.AddScoped, Repository>();
    builder.Services.AddScoped, Service>();
    builder.Services.AddDbContext(options => options.UseNpgsql(builder.Configuration.GetConnectionString("DefaultConnection")));
    builder.Services.AddScoped();
    builder.Services.AddScoped();
    builder.Services.AddScoped();
    builder.Services.addmapping();
    builder.Services.AddFluentValidation();
    builder.Services.AddValidatorsFromAssemblyContaining();
    builder.Services.Configure(o => o
    .AddFixedWindowLimiter(policyName: "fixed", options =>
    {
    options.PermitLimit = 1;
    options.QueueLimit = 4;
    options.Window=TimeSpan.FromSeconds(30);
    options.QueueProcessingOrder = QueueProcessingOrder.OldestFirst;
    }));
    builder.Services.AddRateLimiter(_ => _
    .AddSlidingWindowLimiter(policyName: "sliding", options =>
    {
    options.PermitLimit = 5;
    options.Window = TimeSpan.FromSeconds(1);
    options.SegmentsPerWindow = 4;
    options.QueueProcessingOrder = QueueProcessingOrder.OldestFirst;
    options.QueueLimit = 5;
    }));
    builder.Services.AddRateLimiter(_ => _.AddTokenBucketLimiter(policyName: "Tokenbox", opt =>
    {
    opt.ReplenishmentPeriod = TimeSpan.FromSeconds(30);
    opt.QueueLimit = 5;
    opt.TokenLimit = 1;
    opt.TokensPerPeriod = 8;
    opt.QueueProcessingOrder = QueueProcessingOrder.OldestFirst;
    }
    ));
    builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(options =>
    {
    options.SaveToken = true;
    options.TokenValidationParameters = new()
    {
    ValidateIssuer = false,
    ValidateAudience = false,
    ValidateLifetime = true,
    ValidateIssuerSigningKey = true,
    ValidIssuer = builder.Configuration["JWTKey:ValidIssuer"],
    ValidAudience = builder.Configuration["JWTKey:ValidAudience"],
    IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(builder.Configuration["JWTKey:Key"]))
    };
    options.Events = new JwtBearerEvents
    {
    OnAuthenticationFailed = context =>
    {
    if (context.Exception.GetType() == typeof(SecurityTokenExpiredException))
    {
    context.Response.Headers.Add("istokentExpired", "true");
    }
    return Task.CompletedTask;
    }
    };
    });
    builder.Services.AddRateLimiter(_ => _
    .AddConcurrencyLimiter(policyName:" concurrencyPolicy", options =>
    {
    options.PermitLimit = 4;
    options.QueueProcessingOrder = QueueProcessingOrder.OldestFirst;
    options.QueueLimit = 5;
    }));
    var app = builder.Build();


    if (app.Environment.IsDevelopment())
    {
    app.UseSwagger();
    app.UseSwaggerUI();
    }


    app.UseHttpsRedirection();


    app.UseAuthorization();


    app.UseRateLimiter();
    app.MapControllers();


    app.Run();
    }
    }
    }using Microsoft.AspNetCore.Mvc;
    using Microsoft.AspNetCore.Mvc.Filters;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;


    namespace CrudforMedicshop.infrastructure.Services
    {
    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
    public class AuthefrationAttributeFilter : Attribute, IAuthorizationFilter
    {
    private readonly string _key;
    private readonly string _value;


    public AuthefrationAttributeFilter(string value, string key = "permission")
    {
    _key = key;
    _value = value;
    }


    using AutoMapper;
    using CrudforMedicshop.Application.Interfaces;
    using CrudforMedicshop.Domain.Entities;
    using CrudforMedicshop.Domain.Models;
    using CrudforMedicshop.infrastructure.Services;
    using Microsoft.AspNetCore.Authorization;
    using Microsoft.AspNetCore.Http;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.AspNetCore.RateLimiting;


    namespace CrudforMedicshop.Controllers
    {
    [Route("api/[controller]")]
    [ApiController]
    public class MedicineController : ControllerBase
    {
    private readonly Iservice _iservice;
    private readonly IMapper _mapper;


    public MedicineController(Iservice service, IMapper mapper)
    {
    _iservice = service;
    _mapper = mapper;
    }
    [ HttpGet("GetallMedicine")]
    //[EnableRateLimiting("fixed")]
    [EnableRateLimiting("Tokenbox")]
    [AuthefrationAttributeFilter("GetallMedicine")]
    //[EnableRateLimiting("concurrencyPolicy")]
    public async Task< IActionResult> GetallMedicine()
    {
    return Ok(await _iservice.Getall());
    }


    [HttpGet("GetbyidMedicine")]
    [AuthefrationAttributeFilter("GetbyidMedicine")]
    public async Task< IActionResult> GetbyidMedicine(int id)
    {
    var user = await _iservice.GetById(id);
    if (user != null)
    {
    return Ok(user);
    }
    return NotFound("User not found");
    }


    [HttpPost("CreateMedicine")]
    [AuthefrationAttributeFilter("CreateMedicine")]
    public async Task CreateMedicine(MedicineForCreateDTO Medicine)
    {
    Medicine Medicine1 = _mapper.Map(Medicine);


    var result = await _iservice.Create(Medicine1);
    return Ok(result);
    }


    [HttpDelete("Delete")]
    [AuthefrationAttributeFilter("DeleteMedicine")]
    public async Task< IActionResult> DeleteMedicine(int id)
    {
    var result = await _iservice.Delete(id);
    return Ok(result);
    }


    [HttpPatch("Update")]
    [AuthefrationAttributeFilter("UpdateMedicine")]
    public async Task< IActionResult> UpdateMedicine(Medicine Medicine)
    {
    var result = await _iservice.Update(Medicine);
    return Ok(result);
    }
    [HttpGet("NearlyExpiredMedicines")]
    [AuthefrationAttributeFilter("NearlyExpiredMedicines")]
    public async Task NearlyExpiredMedicines()
    {
    var result =await _iservice.NearlyExpiredMedicines();
    return Ok(result);
    }
    [HttpGet("SearchbyText")]
    [AuthefrationAttributeFilter("SearchbyText")]
    public async Task SearchbyText(string Mediciname)
    {
    var result = await _iservice.SearchbyText(Mediciname);
    return Ok(result);
    }
    [HttpGet("ThemostsoldMedicine")]
    [AuthefrationAttributeFilter("ThemostsoldMedicine")]
    public async Task ThemostsoldMedicine()
    {
    var result = _iservice.ThemostsoldMedicine();
    return Ok(result);
    }
    }
    }
    using CrudforMedicshop.Application.Interfaces;
    using CrudforMedicshop.Domain.Entities;
    using CrudforMedicshop.Domain.Models;
    using Microsoft.AspNetCore.Authorization;
    using Microsoft.AspNetCore.Http;
    using Microsoft.AspNetCore.Mvc;
    using System.Security.Cryptography;


    namespace CrudforMedicshop.Controllers
    {
    [Route("api/[controller]/[action]")]
    [ApiController]
    [Authorize]
    public class AuthentificationController : ControllerBase
    {
    private readonly IIdentityService _identityService;


    public AuthentificationController(IIdentityService identityService)
    {
    _identityService = identityService;
    }
    [HttpPost]
    [AllowAnonymous]
    public async Task>Register(UserDTO user)
    {
    return await _identityService.RegisterAsync(user);
    }
    [HttpPost]
    [AllowAnonymous]
    public async Task>Login(Credential credential)
    {
    return await _identityService.LoginAsync(credential);
    }
    [HttpGet]
    [Authorize(Roles ="Admin")]
    public async Task<(bool,RefreshToken)>Logout(string Refreshtoken)
    {
    return await _identityService.logoutAsync(Refreshtoken);
    }
    [HttpDelete]
    public async Taskbool>>DeleteUser(int userid)
    {
    return await _identityService.DeleteUserAsync(userid);
    }
    [HttpPost]
    [AllowAnonymous]
    public async Task>RefreshToken(Token token)
    {
    return await _identityService.RefreshTokenAsync(token);
    }
    [HttpPost]
    public async Taskbool>>Delete(int userid)
    {
    return await _identityService.DeleteUserAsync(userid);
    }


    }
    }
    {
    "Logging": {
    "LogLevel": {
    "Default": "Information",
    "Microsoft.AspNetCore": "Warning"
    }
    },
    "AllowedHosts": "*",
    "ConnectionStrings": { "DefaultConnection": "Server=::1;Port=5432;Database=TeachersBase;user id=postgres;password=123456" },
    "JWTKey": {
    "ValidAudience": "https://localhost:7056
    ",
    "ValidIssuer": "https://localhost:7056
    ",
    "TokenExpiryTimeInMinutes": "3",
    "RefreshTokenValidityInMinutes": "7",
    "Key": "asdadasdmlvkjalksjajdwkdjoqiiashcnakscnlakschioahsanc"
    }
    }
    Download 256.98 Kb.
    1   ...   5   6   7   8   9   10   11   12   13




    Download 256.98 Kb.

    Bosh sahifa
    Aloqalar

        Bosh sahifa



    Ushbu kitob, ASP.NET Core frameworkining qanday ishlashini, tashqi interfeysni yaratishni va ma'lumotlar bazasidan foydalanishni o'rgatadi

    Download 256.98 Kb.