diff --git a/.idea/misc.xml b/.idea/misc.xml
index 5cd9a10..c6674f3 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,7 +1,7 @@
-
+
\ No newline at end of file
diff --git a/src/main/kotlin/Main.kt b/src/main/kotlin/Main.kt
index 944ca99..54f3436 100644
--- a/src/main/kotlin/Main.kt
+++ b/src/main/kotlin/Main.kt
@@ -1,15 +1,23 @@
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.model.FavouriteRepositoryImpl
import org.example.domain.UserUseCaseImpl
+import org.example.ui.MainMenuUI
import org.example.ui.UserUI
+
+//class_student
+//localuser - где нет rtk
+//844SystemUser
fun main() {
val userRepository = UserRepositoryImpl()
- val userUseCase = UserUseCaseImpl(userRepository)
+ val favouriteRepository = FavouriteRepositoryImpl()
+ val shoesRepository = ShoesRepositoryImpl()
+ val userUseCase = UserUseCaseImpl(userRepository, favouriteRepository, shoesRepository)
val userUI = UserUI(userUseCase)
- userUI.authorize()
- userUI.changePassword()
- userUI.authorize()
+ val mainMenuUI = MainMenuUI(userUI)
+ mainMenuUI.displayStartMenu()
}
\ No newline at end of file
diff --git a/src/main/kotlin/data/FavouriteRepository.kt b/src/main/kotlin/data/FavouriteRepository.kt
new file mode 100644
index 0000000..3eee61c
--- /dev/null
+++ b/src/main/kotlin/data/FavouriteRepository.kt
@@ -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
+}
diff --git a/src/main/kotlin/data/ShoesRepository.kt b/src/main/kotlin/data/ShoesRepository.kt
new file mode 100644
index 0000000..72966b8
--- /dev/null
+++ b/src/main/kotlin/data/ShoesRepository.kt
@@ -0,0 +1,10 @@
+package org.example.data
+
+import org.example.data.model.ShoesDTO
+
+interface ShoesRepository {
+ fun addShoes()
+ fun getAllShoes(): List
+ fun removeShoes()
+ fun getShoesById()
+}
\ No newline at end of file
diff --git a/src/main/kotlin/data/ShoesRepositoryImpl.kt b/src/main/kotlin/data/ShoesRepositoryImpl.kt
new file mode 100644
index 0000000..39c3159
--- /dev/null
+++ b/src/main/kotlin/data/ShoesRepositoryImpl.kt
@@ -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 {
+ return shoesSource
+ }
+
+
+ override fun removeShoes() {
+ TODO("Not yet implemented")
+ }
+
+ override fun getShoesById() {
+ TODO("Not yet implemented")
+ }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/data/localDataSource.kt b/src/main/kotlin/data/localDataSource.kt
index d2f8a7b..fcf9562 100644
--- a/src/main/kotlin/data/localDataSource.kt
+++ b/src/main/kotlin/data/localDataSource.kt
@@ -1,7 +1,30 @@
package org.example.data
+import org.example.data.model.FavouriteDTO
+import org.example.data.model.ShoesDTO
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(
UserDTO(
userId = 1,
diff --git a/src/main/kotlin/data/model/BucketDTO.kt b/src/main/kotlin/data/model/BucketDTO.kt
new file mode 100644
index 0000000..64864e7
--- /dev/null
+++ b/src/main/kotlin/data/model/BucketDTO.kt
@@ -0,0 +1,5 @@
+package org.example.data.model
+
+//data class BucketDTO(
+//
+//)
\ No newline at end of file
diff --git a/src/main/kotlin/data/model/FavouriteDTO.kt b/src/main/kotlin/data/model/FavouriteDTO.kt
new file mode 100644
index 0000000..ea9e3f4
--- /dev/null
+++ b/src/main/kotlin/data/model/FavouriteDTO.kt
@@ -0,0 +1,6 @@
+package org.example.data.model
+
+data class FavouriteDTO(
+ val userId: Int,
+ val shoesID: Int
+)
\ No newline at end of file
diff --git a/src/main/kotlin/data/model/FavouriteRepositoryImpl.kt b/src/main/kotlin/data/model/FavouriteRepositoryImpl.kt
new file mode 100644
index 0000000..1fe7cf5
--- /dev/null
+++ b/src/main/kotlin/data/model/FavouriteRepositoryImpl.kt
@@ -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()
+ }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/data/model/ShoesDTO.kt b/src/main/kotlin/data/model/ShoesDTO.kt
new file mode 100644
index 0000000..bd5adf6
--- /dev/null
+++ b/src/main/kotlin/data/model/ShoesDTO.kt
@@ -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,
+)
\ No newline at end of file
diff --git a/src/main/kotlin/domain/UserUseCaseImpl.kt b/src/main/kotlin/domain/UserUseCaseImpl.kt
index e649f0e..ecfe7a6 100644
--- a/src/main/kotlin/domain/UserUseCaseImpl.kt
+++ b/src/main/kotlin/domain/UserUseCaseImpl.kt
@@ -1,12 +1,18 @@
package org.example.domain
+import org.example.data.FavouriteRepository
+import org.example.data.ShoesRepository
import org.example.data.UserRepository
import org.example.domain.request.AuthorizeRequest
import org.example.domain.request.ChangePasswordRequest
import org.example.domain.request.RegistrationRequest
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 {
val findUser = userRepository.getAllUsers()
.firstOrNull {
@@ -18,7 +24,9 @@ class UserUseCaseImpl(private val userRepository: UserRepository): UserUseCase {
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 {
@@ -30,7 +38,7 @@ class UserUseCaseImpl(private val userRepository: UserRepository): UserUseCase {
"Такая почта уже существует"
}
val newUser = userRepository.addUser(registrationRequest)
- return UserDtoToUserResponse(newUser)
+ return userDtoToUserResponse(newUser)
}
override fun changePassword(changePasswordRequest: ChangePasswordRequest) {
diff --git a/src/main/kotlin/domain/mapper.kt b/src/main/kotlin/domain/mapper.kt
index 6885c6e..60a48fd 100644
--- a/src/main/kotlin/domain/mapper.kt
+++ b/src/main/kotlin/domain/mapper.kt
@@ -1,13 +1,26 @@
package org.example.domain
+import org.example.data.model.ShoesDTO
import org.example.data.model.UserDTO
+import org.example.domain.response.ShoesResponse
import org.example.domain.response.UserResponse
-fun UserDtoToUserResponse(userDTO: UserDTO) = UserResponse(
+fun userDtoToUserResponse(userDTO: UserDTO, shoesList: List = emptyList()) = UserResponse(
lastName = userDTO.lastName,
firstName = userDTO.firstName,
email = userDTO.email,
phone = userDTO.phone,
userId = userDTO.userId,
address = userDTO.address,
-)
\ No newline at end of file
+ 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
+ )
+}
\ No newline at end of file
diff --git a/src/main/kotlin/domain/request/AddFavouriteRequest.kt b/src/main/kotlin/domain/request/AddFavouriteRequest.kt
new file mode 100644
index 0000000..c9684a8
--- /dev/null
+++ b/src/main/kotlin/domain/request/AddFavouriteRequest.kt
@@ -0,0 +1,3 @@
+package org.example.domain.request
+
+data class AddFavouriteRequest(val userID:Int, val shoesID: Int)
diff --git a/src/main/kotlin/domain/response/ShoesResponse.kt b/src/main/kotlin/domain/response/ShoesResponse.kt
new file mode 100644
index 0000000..3dc8f4a
--- /dev/null
+++ b/src/main/kotlin/domain/response/ShoesResponse.kt
@@ -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"
+ }
+}
+
+
diff --git a/src/main/kotlin/domain/response/UserResponse.kt b/src/main/kotlin/domain/response/UserResponse.kt
index 1fdd8f2..63c35e0 100644
--- a/src/main/kotlin/domain/response/UserResponse.kt
+++ b/src/main/kotlin/domain/response/UserResponse.kt
@@ -1,5 +1,7 @@
package org.example.domain.response
+import org.example.data.model.ShoesDTO
+
data class UserResponse(
val userId: Int,
var firstName: String,
@@ -7,4 +9,5 @@ data class UserResponse(
var email: String,
var phone: String? = null,
var address: String? = null,
+ var favouriteList: List = emptyList()
)
diff --git a/src/main/kotlin/ui/MainMenuUI.kt b/src/main/kotlin/ui/MainMenuUI.kt
new file mode 100644
index 0000000..3f927ce
--- /dev/null
+++ b/src/main/kotlin/ui/MainMenuUI.kt
@@ -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()
+ }
+ }
+}
diff --git a/src/main/kotlin/ui/UserUI.kt b/src/main/kotlin/ui/UserUI.kt
index c3c5ce1..ddca11d 100644
--- a/src/main/kotlin/ui/UserUI.kt
+++ b/src/main/kotlin/ui/UserUI.kt
@@ -26,6 +26,11 @@ class UserUI(private val userUseCase: UserUseCase) {
userAuthorized = user
println(userResponseToString(user))
}
+
+ fun edit(){
+
+ }
+
fun changePassword(){
checkNotNull(userAuthorized){
"Вы не авторизованы"
@@ -84,6 +89,16 @@ class UserUI(private val userUseCase: UserUseCase) {
printOutput.appendLine()
printOutput.append("Ваш адрес ${userResponse.phone}")
}
+ if(!userResponse.favouriteList.isEmpty()){
+ printOutput.appendLine()
+ printOutput.append(
+ userResponse.favouriteList
+ .map { it.toString() }
+ .joinToString("\n")
+
+ )
+
+ }
return printOutput.toString()
}
}
\ No newline at end of file