add shoes

This commit is contained in:
KP9lKk 2025-01-30 10:48:04 +03:00
parent 628fb039d6
commit e387f25273
17 changed files with 263 additions and 11 deletions

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" /> <component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="21" project-jdk-type="JavaSDK"> <component name="ProjectRootManager" version="2" languageLevel="JDK_23_PREVIEW" project-jdk-name="23" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" /> <output url="file://$PROJECT_DIR$/out" />
</component> </component>
</project> </project>

View File

@ -1,15 +1,23 @@
package org.example package org.example
import org.example.data.UserRepository import org.example.data.ShoesRepository
import org.example.data.ShoesRepositoryImpl
import org.example.data.UserRepositoryImpl import org.example.data.UserRepositoryImpl
import org.example.data.model.FavouriteRepositoryImpl
import org.example.domain.UserUseCaseImpl import org.example.domain.UserUseCaseImpl
import org.example.ui.MainMenuUI
import org.example.ui.UserUI import org.example.ui.UserUI
//class_student
//localuser - где нет rtk
//844SystemUser
fun main() { fun main() {
val userRepository = UserRepositoryImpl() val userRepository = UserRepositoryImpl()
val userUseCase = UserUseCaseImpl(userRepository) val favouriteRepository = FavouriteRepositoryImpl()
val shoesRepository = ShoesRepositoryImpl()
val userUseCase = UserUseCaseImpl(userRepository, favouriteRepository, shoesRepository)
val userUI = UserUI(userUseCase) val userUI = UserUI(userUseCase)
userUI.authorize() val mainMenuUI = MainMenuUI(userUI)
userUI.changePassword() mainMenuUI.displayStartMenu()
userUI.authorize()
} }

View File

@ -0,0 +1,10 @@
package org.example.data
import org.example.domain.request.AddFavouriteRequest
interface FavouriteRepository{
fun getAllFavourites()
fun addFavourites(vararg addFavouriteRequest: AddFavouriteRequest)
fun removeFavourites()
fun getFavouritesByUserId(userID: Int): IntArray
}

View File

@ -0,0 +1,10 @@
package org.example.data
import org.example.data.model.ShoesDTO
interface ShoesRepository {
fun addShoes()
fun getAllShoes(): List<ShoesDTO>
fun removeShoes()
fun getShoesById()
}

View File

@ -0,0 +1,24 @@
package org.example.data
import org.example.data.model.ShoesDTO
class ShoesRepositoryImpl: ShoesRepository {
private val shoesSource = shoesList.toMutableList()
override fun addShoes() {
TODO("Not yet implemented")
}
override fun getAllShoes(): List<ShoesDTO> {
return shoesSource
}
override fun removeShoes() {
TODO("Not yet implemented")
}
override fun getShoesById() {
TODO("Not yet implemented")
}
}

View File

@ -1,7 +1,30 @@
package org.example.data package org.example.data
import org.example.data.model.FavouriteDTO
import org.example.data.model.ShoesDTO
import org.example.data.model.UserDTO import org.example.data.model.UserDTO
val shoesList = listOf(
ShoesDTO(
shoesId = 1,
shoesName = "1",
shoesDescription = "123",
shoesUrl = "3",
category = "123"
)
)
val favouriteListSource = listOf(
FavouriteDTO(
1,
1
),
FavouriteDTO(
2,
1
)
)
val userList = listOf( val userList = listOf(
UserDTO( UserDTO(
userId = 1, userId = 1,

View File

@ -0,0 +1,5 @@
package org.example.data.model
//data class BucketDTO(
//
//)

View File

@ -0,0 +1,6 @@
package org.example.data.model
data class FavouriteDTO(
val userId: Int,
val shoesID: Int
)

View File

@ -0,0 +1,27 @@
package org.example.data.model
import org.example.data.FavouriteRepository
import org.example.data.favouriteListSource
import org.example.domain.request.AddFavouriteRequest
class FavouriteRepositoryImpl: FavouriteRepository {
val favouriteList = favouriteListSource.toMutableList()
override fun getAllFavourites() {
TODO("Not yet implemented")
}
override fun addFavourites(vararg addFavouriteRequest: AddFavouriteRequest) {
TODO("Not yet implemented")
}
override fun removeFavourites() {
TODO("Not yet implemented")
}
override fun getFavouritesByUserId(userID: Int): IntArray {
return favouriteList
.filter { it.userId == userID }
.map { it.shoesID }
.toIntArray()
}
}

View File

@ -0,0 +1,9 @@
package org.example.data.model
data class ShoesDTO (
val shoesId: Int,
val shoesName: String,
val shoesDescription: String,
val shoesUrl: String,
val category: String,
)

View File

@ -1,12 +1,18 @@
package org.example.domain package org.example.domain
import org.example.data.FavouriteRepository
import org.example.data.ShoesRepository
import org.example.data.UserRepository import org.example.data.UserRepository
import org.example.domain.request.AuthorizeRequest import org.example.domain.request.AuthorizeRequest
import org.example.domain.request.ChangePasswordRequest import org.example.domain.request.ChangePasswordRequest
import org.example.domain.request.RegistrationRequest import org.example.domain.request.RegistrationRequest
import org.example.domain.response.UserResponse import org.example.domain.response.UserResponse
class UserUseCaseImpl(private val userRepository: UserRepository): UserUseCase { class UserUseCaseImpl(
private val userRepository: UserRepository,
private val favouriteRepository: FavouriteRepository,
private val shoesRepository: ShoesRepository
): UserUseCase {
override fun authorize(authorizeRequest: AuthorizeRequest): UserResponse { override fun authorize(authorizeRequest: AuthorizeRequest): UserResponse {
val findUser = userRepository.getAllUsers() val findUser = userRepository.getAllUsers()
.firstOrNull { .firstOrNull {
@ -18,7 +24,9 @@ class UserUseCaseImpl(private val userRepository: UserRepository): UserUseCase {
require(findUser.password == authorizeRequest.password){ require(findUser.password == authorizeRequest.password){
"Пароли не совпадают" "Пароли не совпадают"
} }
return UserDtoToUserResponse(findUser) val favourite = favouriteRepository.getFavouritesByUserId(userID = findUser.userId)
val shoesFavourite = shoesRepository.getAllShoes().filter { it.shoesId in favourite}
return userDtoToUserResponse(findUser, shoesFavourite)
} }
override fun registration(registrationRequest: RegistrationRequest): UserResponse { override fun registration(registrationRequest: RegistrationRequest): UserResponse {
@ -30,7 +38,7 @@ class UserUseCaseImpl(private val userRepository: UserRepository): UserUseCase {
"Такая почта уже существует" "Такая почта уже существует"
} }
val newUser = userRepository.addUser(registrationRequest) val newUser = userRepository.addUser(registrationRequest)
return UserDtoToUserResponse(newUser) return userDtoToUserResponse(newUser)
} }
override fun changePassword(changePasswordRequest: ChangePasswordRequest) { override fun changePassword(changePasswordRequest: ChangePasswordRequest) {

View File

@ -1,13 +1,26 @@
package org.example.domain package org.example.domain
import org.example.data.model.ShoesDTO
import org.example.data.model.UserDTO import org.example.data.model.UserDTO
import org.example.domain.response.ShoesResponse
import org.example.domain.response.UserResponse import org.example.domain.response.UserResponse
fun UserDtoToUserResponse(userDTO: UserDTO) = UserResponse( fun userDtoToUserResponse(userDTO: UserDTO, shoesList: List<ShoesDTO> = emptyList()) = UserResponse(
lastName = userDTO.lastName, lastName = userDTO.lastName,
firstName = userDTO.firstName, firstName = userDTO.firstName,
email = userDTO.email, email = userDTO.email,
phone = userDTO.phone, phone = userDTO.phone,
userId = userDTO.userId, userId = userDTO.userId,
address = userDTO.address, address = userDTO.address,
favouriteList = shoesList.map(::shoesDtoToUserResponse)
) )
fun shoesDtoToUserResponse(shoesDTO: ShoesDTO): ShoesResponse{
return ShoesResponse(
shoesId = shoesDTO.shoesId,
shoesName = shoesDTO.shoesName,
shoesUrl = shoesDTO.shoesUrl,
shoesDescription = shoesDTO.shoesDescription,
category = shoesDTO.category
)
}

View File

@ -0,0 +1,3 @@
package org.example.domain.request
data class AddFavouriteRequest(val userID:Int, val shoesID: Int)

View File

@ -0,0 +1,16 @@
package org.example.domain.response
data class ShoesResponse(
val shoesId: Int,
val shoesName: String,
val shoesDescription: String,
val shoesUrl: String,
val category: String,
)
{
override fun toString(): String {
return "name: $shoesName\nshoes: $shoesDescription"
}
}

View File

@ -1,5 +1,7 @@
package org.example.domain.response package org.example.domain.response
import org.example.data.model.ShoesDTO
data class UserResponse( data class UserResponse(
val userId: Int, val userId: Int,
var firstName: String, var firstName: String,
@ -7,4 +9,5 @@ data class UserResponse(
var email: String, var email: String,
var phone: String? = null, var phone: String? = null,
var address: String? = null, var address: String? = null,
var favouriteList: List<ShoesResponse> = emptyList()
) )

View File

@ -0,0 +1,72 @@
package org.example.ui
class MainMenuUI(
private val userUI: UserUI
){
val menuItems = listOf(
"1. Авторизоваться",
"2. Зарегестрироваться",
"3. Exit"
)
val menuAuthorizedItems = listOf(
"1. Change password",
"2. Edit profile",
"3. Exit"
)
private fun displayMenuItem(menuItem: () -> Unit){
try {
menuItem()
}
catch (e: Exception){
println(e.message)
userUI.userAuthorized?.let {
displayMenuForAuthorizeUser()
}
}
}
fun displayStartMenu(){
print(menuItems.joinToString("\n"))
val menuPosition = readlnOrNull()?.toIntOrNull()
if(menuPosition == null) displayStartMenu()
when(menuPosition){
1 -> {
displayMenuItem {
userUI.authorize()
displayMenuForAuthorizeUser()
}
}
2 -> {
userUI.registration()
}
3 ->{
return
}
else -> {
displayStartMenu()
}
}
}
private fun displayMenuForAuthorizeUser(){
print(menuAuthorizedItems.joinToString("\n"))
val menuPosition = readlnOrNull()?.toIntOrNull()
if(menuPosition == null) displayMenuForAuthorizeUser()
when(menuPosition){
1 -> {
displayMenuItem {
userUI.changePassword()
}
}
2 -> {
userUI.edit()
}
3 -> {
return
}
else -> displayMenuForAuthorizeUser()
}
}
}

View File

@ -26,6 +26,11 @@ class UserUI(private val userUseCase: UserUseCase) {
userAuthorized = user userAuthorized = user
println(userResponseToString(user)) println(userResponseToString(user))
} }
fun edit(){
}
fun changePassword(){ fun changePassword(){
checkNotNull(userAuthorized){ checkNotNull(userAuthorized){
"Вы не авторизованы" "Вы не авторизованы"
@ -84,6 +89,16 @@ class UserUI(private val userUseCase: UserUseCase) {
printOutput.appendLine() printOutput.appendLine()
printOutput.append("Ваш адрес ${userResponse.phone}") printOutput.append("Ваш адрес ${userResponse.phone}")
} }
if(!userResponse.favouriteList.isEmpty()){
printOutput.appendLine()
printOutput.append(
userResponse.favouriteList
.map { it.toString() }
.joinToString("\n")
)
}
return printOutput.toString() return printOutput.toString()
} }
} }