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:
- Otsib toodet selle ID järgi
Tooted
tabelist . Kui toodet ei ole olemas või see on mitteaktiivne, saadakse tagasi viga. - Otsib kasutajat selle ID järgi tabelis
Kasutajad
. Kui kasutajat ei ole olemas, tagastatakse viga. - Kontrollib, kas kasutajal on see toode. Kui jah, siis tagastatakse viga.
- Kui kõik kontrollid lähevad läbi, luuakse tabelis
KasutajaTooted
kirje, mis seob kasutaja ja toote. - 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);
}
