korzina
This commit is contained in:
parent
9ba2ada96c
commit
7177f75440
@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_22" default="true" project-jdk-name="corretto-22" project-jdk-type="JavaSDK">
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_21" project-jdk-name="corretto-22" project-jdk-type="JavaSDK">
|
||||
<output url="file://$PROJECT_DIR$/out" />
|
||||
</component>
|
||||
</project>
|
@ -7,7 +7,8 @@ plugins {
|
||||
|
||||
ktor {
|
||||
docker {
|
||||
jreVersion.set(JavaVersion.VERSION_22)
|
||||
// jreVersion.set(JavaVersion.VERSION_22)
|
||||
jreVersion.set(JavaVersion.VERSION_21)
|
||||
localImageName.set("ktor-api")
|
||||
imageTag.set("latest")
|
||||
portMappings.set(
|
||||
@ -57,5 +58,6 @@ tasks.test {
|
||||
useJUnitPlatform()
|
||||
}
|
||||
kotlin {
|
||||
jvmToolchain(22)
|
||||
// jvmToolchain(22)
|
||||
jvmToolchain(21)
|
||||
}
|
25
init.sql
25
init.sql
@ -18,6 +18,7 @@ CREATE TABLE IF NOT EXISTS sneakers(
|
||||
name VARCHAR(255) NOT NULL,
|
||||
description VARCHAR(255) NOT NULL,
|
||||
cost DECIMAL(10,2) NOT NULL,
|
||||
count INTEGER NOT NULL,
|
||||
discount INTEGER NOT NULL CHECK (discount >= 0 AND discount <= 100),
|
||||
photo VARCHAR(255) NOT NULL,
|
||||
gender CHAR(1) NOT NULL CHECK (gender IN ('M', 'F', 'U')),
|
||||
@ -35,11 +36,23 @@ VALUES ('outdoor', 'for walking');
|
||||
INSERT INTO categories (name, description)
|
||||
VALUES ('football', 'for football');
|
||||
|
||||
INSERT INTO sneakers (name, description, cost, discount, photo, gender, bootSize, categoryid)
|
||||
VALUES ('Adidas', 'fast', 120.50, 10, 'https://images.footlocker.com/is/image/FLEU/314312107304_01?wid=500&hei=500&fmt=png-alpha', 'M', 42, 3);
|
||||
INSERT INTO sneakers (name, description, cost, count, discount, photo, gender, bootSize, categoryid)
|
||||
VALUES ('Adidas', 'fast', 120.50, 6, 10, 'https://images.footlocker.com/is/image/FLEU/314312107304_01?wid=500&hei=500&fmt=png-alpha', 'M', 42, 3);
|
||||
|
||||
INSERT INTO sneakers (name, description, cost, discount, photo, gender, bootSize, categoryid)
|
||||
VALUES ('Nike Air Max', 'Comfortable running shoes', 140, 40, 'https://static.nike.com/a/images/t_default/c4d6bfc9-f44f-467a-8e27-d9d46cfec67e/NIKE+AIR+MAX+270+GS.png', 'F', 39, 2);
|
||||
INSERT INTO sneakers (name, description, cost, count, discount, photo, gender, bootSize, categoryid)
|
||||
VALUES ('Nike', 'Comfortable running shoes', 140, 8, 40, 'https://static.nike.com/a/images/t_default/c4d6bfc9-f44f-467a-8e27-d9d46cfec67e/NIKE+AIR+MAX+270+GS.png', 'F', 39, 2);
|
||||
|
||||
INSERT INTO sneakers (name, description, cost, discount, photo, gender, bootSize, categoryid)
|
||||
VALUES ('Puma', 'fast too', 80.12, 80, 'https://www.xxl.se/filespin/63b77c174b30493397b4c328300252ef', 'U', 41, 1);
|
||||
INSERT INTO sneakers (name, description, cost, count, discount, photo, gender, bootSize, categoryid)
|
||||
VALUES ('Puma', 'fast too', 80.12, 4, 80, 'https://www.xxl.se/filespin/63b77c174b30493397b4c328300252ef', 'U', 41, 1);
|
||||
|
||||
INSERT INTO sneakers (name, description, cost, count, discount, photo, gender, bootSize, categoryid)
|
||||
VALUES ('Puma 2', 'fast too', 80.12, 4, 80, 'https://russiangolfer.ru/15127-large_default/krossovki-puma-gs-fast.jpg', 'U', 41, 1);
|
||||
|
||||
INSERT INTO sneakers (name, description, cost, count, discount, photo, gender, bootSize, categoryid)
|
||||
VALUES ('Adidas 2', 'fast too', 80.12, 4, 80, 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRiEqdFHbi0oc5NxX7UW5y-3HokGmMc70MkWw&s', 'U', 41, 1);
|
||||
|
||||
INSERT INTO sneakers (name, description, cost, count, discount, photo, gender, bootSize, categoryid)
|
||||
VALUES ('Nike 2', 'fast too', 80.12, 4, 80, 'https://jordan-nike.ru/image/cache/catalog/!!!!!!!!!!!!!!!!!!!!!!!!!!111111111111111111111111111111111111111111111/_2022-12-29_102143143-300x350.png', 'U', 41, 1);
|
||||
|
||||
INSERT INTO sneakers (name, description, cost, count, discount, photo, gender, bootSize, categoryid)
|
||||
VALUES ('Puma 3', 'fast too', 80.12, 4, 80, 'https://slamdunk.shop/wp-content/uploads/2024/09/la-france-untouchable-310865-01.webp', 'U', 41, 1);
|
||||
|
@ -171,5 +171,14 @@ fun Application.configureRouting() {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
post("/buySneakers") {
|
||||
val request = call.receive<BuySneakersRequest>()
|
||||
if (AuthService.buySneakers(request)){
|
||||
call.respond(mapOf("message" to "Куплено"))
|
||||
} else{
|
||||
call.respond(mapOf("error" to "Ну вот не куплено"))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,7 @@ package com.example
|
||||
|
||||
import at.favre.lib.crypto.bcrypt.BCrypt
|
||||
import org.jetbrains.exposed.sql.*
|
||||
import org.jetbrains.exposed.sql.SqlExpressionBuilder.minus
|
||||
import org.jetbrains.exposed.sql.transactions.transaction
|
||||
import java.net.InetAddress
|
||||
import java.util.Random
|
||||
@ -100,6 +101,7 @@ object AuthService {
|
||||
name = it[Sneakers.name],
|
||||
description = it[Sneakers.description],
|
||||
cost = it[Sneakers.cost],
|
||||
count = it[Sneakers.count],
|
||||
discount = it[Sneakers.discount],
|
||||
photo = it[Sneakers.photo],
|
||||
gender = it[Sneakers.gender],
|
||||
@ -129,6 +131,28 @@ object AuthService {
|
||||
throw RuntimeException("Error selecting categories: ${e.message}", e)
|
||||
}
|
||||
}
|
||||
|
||||
fun buySneakers(req: BuySneakersRequest): Boolean {
|
||||
return try {
|
||||
transaction {
|
||||
req.sneakers.forEach { item ->
|
||||
val updatedRows = Sneakers.update({
|
||||
Sneakers.id eq item.sneakerId
|
||||
}) {
|
||||
it[count] = count - item.count
|
||||
}
|
||||
|
||||
if (updatedRows == 0) {
|
||||
throw IllegalStateException("Not enough sneakers or sneaker with ID ${item.sneakerId} not found")
|
||||
}
|
||||
}
|
||||
}
|
||||
true
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -16,6 +16,12 @@ data class UserForgotPasswordRequest(val email: String)
|
||||
@Serializable
|
||||
data class UserResetPasswordRequest(val code: String, val newPassword: String)
|
||||
|
||||
@Serializable
|
||||
data class BuySneakerRequest(val sneakerId: Int, val count: Int)
|
||||
|
||||
@Serializable
|
||||
data class BuySneakersRequest(val sneakers: List<BuySneakerRequest>)
|
||||
|
||||
|
||||
@Serializable
|
||||
data class Sneaker(
|
||||
@ -23,6 +29,7 @@ data class Sneaker(
|
||||
val name: String,
|
||||
val description: String,
|
||||
@Contextual val cost: BigDecimal,
|
||||
val count: Int,
|
||||
val discount: Int,
|
||||
val photo: String,
|
||||
val gender: Char,
|
||||
|
@ -23,6 +23,7 @@ object Sneakers : Table("sneakers") {
|
||||
val name = varchar("name", 255)
|
||||
val description = varchar("description", 255)
|
||||
val cost = decimal("cost", 10, 2)
|
||||
val count = integer("count")
|
||||
val discount = integer("discount")
|
||||
val photo = varchar("photo", 255)
|
||||
val gender = char("gender")
|
||||
|
Loading…
Reference in New Issue
Block a user