feat: added models
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
package org.ccoin.models
|
||||
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class ApiResponse<T>(
|
||||
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<String, String>? = 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<T>(
|
||||
val data: List<T>,
|
||||
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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
)
|
||||
|
||||
@@ -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<TransactionResponse>,
|
||||
val totalCount: Int,
|
||||
val page: Int,
|
||||
val pageSize: Int
|
||||
)
|
||||
|
||||
@Serializable
|
||||
enum class TransactionStatus {
|
||||
PENDING,
|
||||
CONFIRMED,
|
||||
FAILED,
|
||||
CANCELLED
|
||||
}
|
||||
|
||||
@@ -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?
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user