diff --git a/server/src/main/kotlin/org/ccoin/models/ApiResponse.kt b/server/src/main/kotlin/org/ccoin/models/ApiResponse.kt index e69de29..b154d61 100644 --- a/server/src/main/kotlin/org/ccoin/models/ApiResponse.kt +++ b/server/src/main/kotlin/org/ccoin/models/ApiResponse.kt @@ -0,0 +1,80 @@ +package org.ccoin.models + +import kotlinx.serialization.Serializable + +@Serializable +data class ApiResponse( + val success: Boolean, + val data: T? = null, + val error: String? = null, + val timestamp: Long = System.currentTimeMillis() +) + +@Serializable +data class ErrorResponse( + val error: String, + val code: String? = null, + val details: Map? = null, + val timestamp: Long = System.currentTimeMillis() +) + +@Serializable +data class SuccessResponse( + val message: String, + val timestamp: Long = System.currentTimeMillis() +) + +@Serializable +data class HealthResponse( + val status: String, + val version: String, + val uptime: Long, + val database: DatabaseHealth, + val blockchain: BlockchainHealth +) + +@Serializable +data class DatabaseHealth( + val connected: Boolean, + val responseTime: Long, + val activeConnections: Int, + val maxConnections: Int +) + +@Serializable +data class BlockchainHealth( + val latestBlock: Int, + val pendingTransactions: Int, + val networkHashRate: Double, + val averageBlockTime: Long +) + +@Serializable +data class PaginationRequest( + val page: Int = 1, + val pageSize: Int = 50, + val sortBy: String? = null, + val sortOrder: SortOrder = SortOrder.DESC +) + +@Serializable +data class PaginatedResponse( + val data: List, + val pagination: PaginationInfo +) + +@Serializable +data class PaginationInfo( + val currentPage: Int, + val pageSize: Int, + val totalItems: Int, + val totalPages: Int, + val hasNext: Boolean, + val hasPrevious: Boolean +) + +@Serializable +enum class SortOrder { + ASC, + DESC +} diff --git a/server/src/main/kotlin/org/ccoin/models/Block.kt b/server/src/main/kotlin/org/ccoin/models/Block.kt index e69de29..a1b8966 100644 --- a/server/src/main/kotlin/org/ccoin/models/Block.kt +++ b/server/src/main/kotlin/org/ccoin/models/Block.kt @@ -0,0 +1,53 @@ +package org.ccoin.models + +import kotlinx.serialization.Serializable + +@Serializable +data class StartMiningRequest( + val minerAddress: String, // Format: random_word:random_6_digits + val difficulty: Int? = null +) + +@Serializable +data class SubmitMiningRequest( + val minerAddress: String, + val nonce: Long, + val hash: String, + val previousHash: String, + val timestamp: Long +) + +@Serializable +data class BlockResponse( + val hash: String, + val previousHash: String?, + val merkleRoot: String, + val timestamp: Long, + val difficulty: Int, + val nonce: Long, + val minerAddress: String + val reward: Double, + val height: Int, + val transactionCount: Int, + val confirmations: Int = 0 +) + +@Serializable +data class MiningJobResponse( + val jobId: String, + val target: String, + val difficulty: Int, + val previousHash: String, + val height: Int, + val timestamp: Long, + val expiresAt: Long +) + +@Serializable +data class MiningStatsResponse( + val minerAddress: String, + val totalBlocksMined: Int, + val totalRewardEarned: Double, + val lastBlockMined: Long?, + val currentDifficulty: Int +) diff --git a/server/src/main/kotlin/org/ccoin/models/Transaction.kt b/server/src/main/kotlin/org/ccoin/models/Transaction.kt index e69de29..a2d84a7 100644 --- a/server/src/main/kotlin/org/ccoin/models/Transaction.kt +++ b/server/src/main/kotlin/org/ccoin/models/Transaction.kt @@ -0,0 +1,42 @@ +package org.ccoin.models + +import kotlinx.serialization.Serializable + +@Serializable +data class SendTransactionRequest( + val fromAddress: String, // Format random_word:random_6_digits + val toAddress: String, // Format random_word:random_6_digits + val amount: Double, + val fee: Double = 0.0, + val memo: String? = null +) + +@Serializable +data class TransactionResponse( + val hash: String, + val fromAddress: String?, + val toAddress: String, + val amount: Double, + val fee: Double, + val memo: String?, + val blockHash: String?, + val timestamp: Long, + val status: TransactionStatus, + val confirmations: Int = 0 +) + +@Serializable +data class TransactionHistoryResponse( + val transactions: List, + val totalCount: Int, + val page: Int, + val pageSize: Int +) + +@Serializable +enum class TransactionStatus { + PENDING, + CONFIRMED, + FAILED, + CANCELLED +} diff --git a/server/src/main/kotlin/org/ccoin/models/Wallet.kt b/server/src/main/kotlin/org/ccoin/models/Wallet.kt index e69de29..cae2ec2 100644 --- a/server/src/main/kotlin/org/ccoin/models/Wallet.kt +++ b/server/src/main/kotlin/org/ccoin/models/Wallet.kt @@ -0,0 +1,28 @@ +package org.ccoin.models + +import kotlinx.serialization.Serializable + +@Serializable +data class CreateWalletRequest( + val label: String? = null +) + +@Serializable +data class WalletResponse( + val address: String, // Format random_word:random_6_digits (e.g. "phoenix:123456") + val balance: Double, + val label: String?, + val createdAt: Long, + val lastActivity: Long? +) + +@Serializable +data class BalanceResponse( + val address: String, + val balance: Double +) + +@Serializable +data class UpdateWalletRequest( + val label: String? +)