Kasutaja ja Tooted

Tooted: See on tabel, milles hoitakse tooteid. Id, nimi, hind ja IsActive

Kasutaja: See on kasutajate tabel. Id, Kasutajanimi, Parool ja Perenimi.

KasutajaToode: See on kasutajate ja toodete vaheline ühendustabel.

KasutajaToode mudel seob kasutajad nende toodetega, võimaldades kasutajatel lisada, eemaldada ja kontrollida, millised tooted millisele kasutajale kuuluvad.

Mudel Kasutaja.cs:

using System.Collections.Generic;

namespace BohatyrovAPI.Models
{
    public class Kasutaja
    {
        public int Id { get; set; }
        public string Kasutajanimi { get; set; }
        public string Parool { get; set; }
        public string Eesnimi { get; set; }
        public string Perenimi { get; set; }


        public List<KasutajaToode> KasutajaTooted { get; set; }

        public Kasutaja(int id, string kasutajanimi, string parool, string eesnimi, string perenimi)
        {
            Id = id;
            Kasutajanimi = kasutajanimi;
            Parool = parool;
            Eesnimi = eesnimi;
            Perenimi = perenimi;
            KasutajaTooted = new List<KasutajaToode>();
        }
    }
}

Mudel Toode.cs:

namespace BohatyrovAPI.Models
{
    public class Toode
    {
        public int Id { get; set; } 
        public string Name { get; set; }  
        public decimal Price { get; set; }
        public bool IsActive { get; set; }  

        public Toode() { }

        public Toode(int id, string name, decimal price, bool isActive)
        {
            Id = id;
            Name = name;
            Price = price;
            IsActive = isActive;
        }
    }
}

Mudel Kasutaja

namespace BohatyrovAPI.Models
{
    public class KasutajaToode
    {
        public int KasutajaId { get; set; }
        public Kasutaja Kasutaja { get; set; }

        public int ToodeId { get; set; }
        public Toode Toode { get; set; }
    }
}

MySQL andmebaasi ühendamine:

Luuakse AppDbContext fail, mis haldab suhtlust andmebaasiga.

using Microsoft.EntityFrameworkCore;
using BohatyrovAPI.Models;

namespace BohatyrovAPI.Data
{
    public class AppDbContext : DbContext
    {
        public DbSet<Kasutaja> Kasutajad { get; set; }
        public DbSet<Toode> Tooted { get; set; }
        public DbSet<KasutajaToode> KasutajaTooted { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            if (!optionsBuilder.IsConfigured)
            {
                optionsBuilder.UseMySql(
                    "Server=localhost;Database=bohatyrovdb;User=root;Password=;",
                    ServerVersion.AutoDetect("Server=localhost;Database=bohatyrovdb;User=root;Password=;")
                );
            }
        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);

            modelBuilder.Entity<KasutajaToode>()
                .HasKey(kt => new { kt.KasutajaId, kt.ToodeId });

            modelBuilder.Entity<KasutajaToode>()
                .HasOne(kt => kt.Kasutaja)
                .WithMany(k => k.KasutajaTooted)
                .HasForeignKey(kt => kt.KasutajaId);

            modelBuilder.Entity<KasutajaToode>()
                .HasOne(kt => kt.Toode)
                .WithMany()  
                .HasForeignKey(kt => kt.ToodeId);
        }

    }
}

1. Toote kättesaadavuse kontrollimine koos kasutajaga

Funktsioon kontrollib, kas konkreetne toode on kasutajale kättesaadav.

        [HttpGet("has-toode/{kasutajaId}/{toodeId}")]
        public ActionResult<bool> HasToode(int kasutajaId, int toodeId)
        {
            var kasutajaToode = _context.KasutajaTooted
                .FirstOrDefault(kt => kt.KasutajaId == kasutajaId && kt.ToodeId == toodeId);

            return Ok(kasutajaToode != null);
        }

2. Toote ostmine kasutaja poolt

See funktsioon võimaldab kasutajal toodet osta.

Loogika:

  1. Otsib toodet selle ID järgi Tooted tabelist . Kui toodet ei ole olemas või see on mitteaktiivne, saadakse tagasi viga.
  2. Otsib kasutajat selle ID järgi tabelis Kasutajad. Kui kasutajat ei ole olemas, tagastatakse viga.
  3. Kontrollib, kas kasutajal on see toode. Kui jah, siis tagastatakse viga.
  4. Kui kõik kontrollid lähevad läbi, luuakse tabelis KasutajaTooted kirje, mis seob kasutaja ja toote.
  5. Muudatused salvestatakse andmebaasi.
 [HttpPost("osta/{id}/{kasutajaId}")]
 public IActionResult Buy(int id, int kasutajaId)
 {
     var toode = _context.Tooted.FirstOrDefault(t => t.Id == id);
     if (toode == null || !toode.IsActive)
     {
         return NotFound("Objekt ei ole saadaval.");
     }

     var kasutaja = _context.Kasutajad.FirstOrDefault(k => k.Id == kasutajaId);
     if (kasutaja == null)
     {
         return NotFound("Kasutajat ei leitud.");
     }

     // Проверка, есть ли уже товар у пользователя
     var kasutajaToode = _context.KasutajaTooted
         .FirstOrDefault(kt => kt.KasutajaId == kasutajaId && kt.ToodeId == id);

     if (kasutajaToode != null)
     {
         return BadRequest("See toode on juba kasutaja valduses.");
     }

 
     _context.KasutajaTooted.Add(new KasutajaToode
     {
         KasutajaId = kasutajaId,
         ToodeId = id
     });

     _context.SaveChanges();

     return Ok($"Kasutaja {kasutaja.Eesnimi} ostetud {toode.Name} {toode.Price} euro eest.");
 }

3. Uue toote lisamine

See funktsioon lisab andmebaasi uue toote. Toode lisatakse ainult siis, kui selle nimi on unikaalne ja hind on suurem kui 0.

 [HttpPost("lisa")]
 public IActionResult AddToode([FromBody] Toode uusToode)
 {
     if (uusToode == null || string.IsNullOrEmpty(uusToode.Name) || uusToode.Price <= 0)
     {
         return BadRequest("Väärad tooteandmed.");
     }

     var existingToode = _context.Tooted.FirstOrDefault(t => t.Name == uusToode.Name);
     if (existingToode != null)
     {
         return BadRequest("Selle nimega objekt on juba olemas.");
     }

     _context.Tooted.Add(uusToode);
     _context.SaveChanges();

     return CreatedAtAction(nameof(GetToode), new { id = uusToode.Id }, uusToode);
 }

4. Toote otsimine ID järgi

Tagastab teabe konkreetse toote kohta selle ID järgi.

        // Получить товар по ID
        [HttpGet("{id}")]
        public ActionResult<Toode> GetToode(int id)
        {
            var toode = _context.Tooted.FirstOrDefault(t => t.Id == id);
            if (toode == null)
            {
                return NotFound("Toodet ei leitud.");
            }

            return Ok(toode);
        }

5. Kõigi toodete nimekirja hankimine

Tagastab kõigi andmebaasi salvestatud toodete loendi.

        // GET: tooted
        [HttpGet]
        public ActionResult<IEnumerable<Toode>> GetTooted()
        {
            var tooted = _context.Tooted.ToList();

            if (tooted == null || !tooted.Any())
            {
                return NotFound("Toodet ei leitud.");
            }

            return Ok(tooted);
        }

6. Toote eemaldamine

Eemaldab toote andmebaasist selle ID järgi.

        // DELETE: tooted/{id}
        [HttpDelete("{id}")]
        public IActionResult DeleteTooted(int id)
        {
            var toode = _context.Tooted.FirstOrDefault(t => t.Id == id);
            if (toode == null)
            {
                return NotFound("Toodet ei leitud.");
            }

    
            _context.Tooted.Remove(toode);
            _context.SaveChanges();

            return NoContent();
        }

7. Toote eemaldamine kasutajalt

eemaldab toote andmebaasist selle ID järgi.

        // DELETE: tooted/{id}
        [HttpDelete("{id}")]
        public IActionResult DeleteTooted(int id)
        {
            var toode = _context.Tooted.FirstOrDefault(t => t.Id == id);
            if (toode == null)
            {
                return NotFound("Toodet ei leitud.");
            }

    
            _context.Tooted.Remove(toode);
            _context.SaveChanges();

            return NoContent();
        }

8. Toote värskendus

Värskendab tooteteavet, sealhulgas toote nime, hinda ja tegevuse olekut.

  // PUT: tooted/{id} 
  [HttpPut("{id}")]
  public IActionResult UpdateTooded(int id, [FromBody] Toode updatedToode)
  {
      var toode = _context.Tooted.FirstOrDefault(t => t.Id == id);
      if (toode == null)
      {
          return NotFound("Toodet ei leitud.");
      }

   
      toode.Name = updatedToode.Name;
      toode.Price = updatedToode.Price;
      toode.IsActive = updatedToode.IsActive;

  
      _context.SaveChanges();

      return Ok(toode);
  }

9. Toote kustutamine kasutajalt

Tilgutab toote id-i järgi kasutaja id-i järgi

  // DELETE: tooted/kasutaja/{kasutajaId}/{toodeId} 
  [HttpDelete("kasutaja/{kasutajaId}/{toodeId}")]
  public IActionResult DeleteTootedFromKasutaja(int kasutajaId, int toodeId)
  {
      var kasutajaToode = _context.KasutajaTooted
          .FirstOrDefault(kt => kt.KasutajaId == kasutajaId && kt.ToodeId == toodeId);

      if (kasutajaToode == null)
      {
          return NotFound("Toodet ei leitud kasutaja juures.");
      }

      _context.KasutajaTooted.Remove(kasutajaToode);
      _context.SaveChanges();

      return NoContent();
  }

Kasutaja

10. Näitab kasutajate nimekirja

// GET api/Kasutaja
[HttpGet]
public ActionResult<IEnumerable<Kasutaja>> GetKasutajad()
{
    var kasutajad = _context.Kasutajad.ToList();
    return Ok(kasutajad);
}

11. Kasutaja lisamine

Lisab kasutaja

        // POST api/Kasutaja 
        [HttpPost]
        public ActionResult<Kasutaja> CreateKasutaja([FromBody] Kasutaja kasutaja)
        {
            kasutaja.Id = _context.Kasutajad.Any() ? _context.Kasutajad.Max(k => k.Id) + 1 : 1;
            _context.Kasutajad.Add(kasutaja);
            _context.SaveChanges();

            return CreatedAtAction(nameof(GetKasutaja), new { id = kasutaja.Id }, kasutaja);
        }

12. Kasutaja kuvamine ID järgi

 // GET api/Kasutaja/{id}
 [HttpGet("{id}")]
 public ActionResult<Kasutaja> GetKasutaja(int id)
 {
     var kasutaja = _context.Kasutajad.FirstOrDefault(k => k.Id == id);
     if (kasutaja == null)
     {
         return NotFound();
     }
     return Ok(kasutaja);
 }

13. Kasutaja uuendus

Uuendab kasutajat ID järgi

// PUT api/Kasutaja/{id}
[HttpPut("{id}")]
public ActionResult UpdateKasutaja(int id, [FromBody] Kasutaja uuendatudKasutaja)
{
    var kasutaja = _context.Kasutajad.FirstOrDefault(k => k.Id == id);
    if (kasutaja == null)
    {
        return NotFound();
    }

    kasutaja.Kasutajanimi = uuendatudKasutaja.Kasutajanimi;
    kasutaja.Parool = uuendatudKasutaja.Parool;
    kasutaja.Eesnimi = uuendatudKasutaja.Eesnimi;
    kasutaja.Perenimi = uuendatudKasutaja.Perenimi;

    _context.SaveChanges();

    return NoContent();
}

14. Kasutaja kustutamine

Kasutaja kustutamine ID järgi

        // DELETE api/Kasutaja/{id}
        [HttpDelete("{id}")]
        public ActionResult DeleteKasutaja(int id)
        {
            var kasutaja = _context.Kasutajad.FirstOrDefault(k => k.Id == id);
            if (kasutaja == null)
            {
                return NotFound();
            }

            _context.Kasutajad.Remove(kasutaja);
            _context.SaveChanges();
            return NoContent();
        }

15. vaadata kasutaja tooteid

näitab kasutaja tooteid

// GET api/Kasutaja/{id}/tooted
[HttpGet("{id}/tooted")]
public ActionResult<IEnumerable<Toode>> GetKasutajaTooted(int id)
{
    var kasutajaTooted = _context.KasutajaTooted
        .Where(kt => kt.KasutajaId == id)
        .Select(kt => kt.Toode)
        .ToList();

    if (!kasutajaTooted.Any())
    {
        return NotFound("У пользователя нет купленных товаров.");
    }

    return Ok(kasutajaTooted);
}