Skip to content

Commit

Permalink
Implementación de recibir múltiples directorios y subdirectorios
Browse files Browse the repository at this point in the history
* Se modifico el endpoint de guardar directorios, ahora recibe múltiples directorios a la vez.

* Se modifico el endpoint de guardar sub directorios, ahora recibe múltiples sub directorios a la vez.

* Se formateo el código para la organización de todo el proyecto en la tabulación.
  • Loading branch information
Jean-Parra committed Sep 23, 2023
1 parent cd0fda1 commit 7cb8449
Show file tree
Hide file tree
Showing 14 changed files with 264 additions and 204 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -29,3 +29,4 @@ target/
# Ignorar archivos de construcción y configuración personal
build.sbt.local
*.sbt.local
.scalafmt.conf
2 changes: 2 additions & 0 deletions build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ ThisBuild / scalaVersion := "2.12.8"
ThisBuild / version := "0.1.0-SNAPSHOT"
ThisBuild / organization := "com.example"
ThisBuild / organizationName := "example"
ThisBuild / scalafmtOnCompile := true


lazy val root = (project in file("."))
.settings(
Expand Down
1 change: 1 addition & 0 deletions project/plugins.sbt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.4.2")
7 changes: 2 additions & 5 deletions src/main/scala/example/DatabaseConfig.scala
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import java.sql.Connection
import java.sql.DriverManager
import com.typesafe.config.ConfigFactory


import scalikejdbc.{ConnectionPool}

object DatabaseConfig {
Expand All @@ -22,11 +21,9 @@ object DatabaseConfig {
ConnectionPool.singleton(dbMasterUrl, dbUser, dbPassword)
true
} catch {
case _: Exception => false

case _: Exception => false

}
}

}

}
113 changes: 63 additions & 50 deletions src/main/scala/example/controllers/DirectoryController.scala
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import io.circe.syntax._
import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global


class DirectoryController {
implicit val session: DBSession = AutoSession

Expand All @@ -18,7 +17,9 @@ class DirectoryController {
val directorioOption = sql"SELECT * FROM directorios WHERE id = $id"
.map { rs =>
DirectoryModel(rs.int("id"), rs.string("nombre"), rs.string("ruta"), rs.int("usuario_id"))
}.single().map { directorio =>
}
.single()
.map { directorio =>
// Respuesta exitosa con estado 200 y JSON de usuario
Right(directorio)
}
Expand All @@ -27,63 +28,75 @@ class DirectoryController {
// Usuario no encontrado con código 404
Left("Directorio no encontrado")
}
} catch {
case e: Exception =>
println(s"Error interno del servidor: ${e.getMessage}") // Imprime detalles del error
Left("Error interno del servidor")
}
} catch {
case e: Exception =>
println(s"Error interno del servidor: ${e.getMessage}") // Imprime detalles del error
Left("Error interno del servidor")
}
}
}

def guardarDirectorio(nombre: String, ruta: String, usuario_id: Int): Future[Either[String, DirectoryModel]] = {
Future {
try {
val result = sql"INSERT INTO directorios (nombre, ruta, usuario_id) VALUES ($nombre, $ruta, $usuario_id)"
.update()

if (result > 0) {
// Recupera el ID generado por la base de datos
val generatedId: Long = sql"SELECT LAST_INSERT_ID()".map(rs => rs.long(1)).single().getOrElse(0L)

// Crea una instancia de DirectoryModel con el ID real
val directorio = DirectoryModel(generatedId.toInt, nombre, ruta, usuario_id)
Right(directorio)
} else {
Left("No se pudo agregar el directorio")
def guardarDirectorios(directorios: List[(String, String, Int)]): Future[List[Either[String, DirectoryModel]]] = {
Future.sequence {
directorios.map { case (nombre, ruta, usuario_id) =>
Future {
try {
val result = sql"INSERT INTO directorios (nombre, ruta, usuario_id) VALUES ($nombre, $ruta, $usuario_id)"
.update()

if (result > 0) {
// Recupera el ID generado por la base de datos
val generatedId: Long = sql"SELECT LAST_INSERT_ID()".map(rs => rs.long(1)).single().getOrElse(0L)

// Crea una instancia de DirectoryModel con el ID real
val directorio = DirectoryModel(generatedId.toInt, nombre, ruta, usuario_id)
Right(directorio)
} else {
Left("No se pudo agregar el directorio")
}
} catch {
case e: Exception =>
println(s"Error interno del servidor: ${e.getMessage}")
Left("Error interno del servidor")
}
}
}
} catch {
case e: Exception =>
println(s"Error interno del servidor: ${e.getMessage}")
Left("Error interno del servidor")
}
}
}

def guardarSubDirectorio(nombre: String, rutaPadre: String, usuario_id: Int): Future[Either[String, DirectoryModel]] = {
Future {
try {
val nuevaRuta = s"$rutaPadre/$nombre"

val result = sql"INSERT INTO directorios (nombre, ruta, usuario_id) VALUES ($nombre, $nuevaRuta, $usuario_id)"
.update()

if (result > 0) {
// Recupera el ID generado por la base de datos
val generatedId: Long = sql"SELECT LAST_INSERT_ID()".map(rs => rs.long(1)).single().getOrElse(0L)

// Crea una instancia de DirectoryModel con el ID real
val directorio = DirectoryModel(generatedId.toInt, nombre, nuevaRuta, usuario_id)
Right(directorio)
} else {
Left("No se pudo agregar el sub directorio")
def guardarSubDirectorios(
subdirectorios: List[(String, String, Int)]
): Future[List[Either[String, DirectoryModel]]] = {
Future.sequence {
subdirectorios.map { case (nombre, rutaPadre, usuario_id) =>
Future {
try {
val nuevaRuta = s"$rutaPadre/$nombre"

val result =
sql"INSERT INTO directorios (nombre, ruta, usuario_id) VALUES ($nombre, $nuevaRuta, $usuario_id)"
.update()

if (result > 0) {
// Recupera el ID generado por la base de datos
val generatedId: Long = sql"SELECT LAST_INSERT_ID()".map(rs => rs.long(1)).single().getOrElse(0L)

// Crea una instancia de DirectoryModel con el ID real
val directorio = DirectoryModel(generatedId.toInt, nombre, nuevaRuta, usuario_id)
Right(directorio)
} else {
Left("No se pudo agregar el sub directorio")
}
} catch {
case e: Exception =>
println(s"Error interno del servidor: ${e.getMessage}")
Left("Error interno del servidor")
}
}
}
} catch {
case e: Exception =>
println(s"Error interno del servidor: ${e.getMessage}")
Left("Error interno del servidor")
}
}
}

def deshabilitarSubdirectorios(idDirectorio: Int): Future[Either[String, String]] = {
Future {
try {
Expand Down Expand Up @@ -159,6 +172,6 @@ class DirectoryController {
}
}
}
*/
*/

}
124 changes: 73 additions & 51 deletions src/main/scala/example/controllers/FileController.scala
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.Await
import scala.concurrent.duration._


class FileController {
implicit val session: DBSession = AutoSession

Expand All @@ -20,9 +19,17 @@ class FileController {
try {
val archivoOption = sql"SELECT * FROM archivos WHERE id = $id"
.map { rs =>

FileModel(rs.int("id"), rs.string("nombre"), rs.string("ruta"), rs.double("tamano"), rs.int("usuario_id"), rs.boolean("habilitado"))
}.single().map { file =>
FileModel(
rs.int("id"),
rs.string("nombre"),
rs.string("ruta"),
rs.double("tamano"),
rs.int("usuario_id"),
rs.boolean("habilitado")
)
}
.single()
.map { file =>
// Respuesta exitosa con estado 200 y JSON de usuario
Right(file)
}
Expand All @@ -31,37 +38,43 @@ class FileController {
// Usuario no encontrado con código 404
Left("Archivo no encontrado")
}
} catch {
case e: Exception =>
println(s"Error interno del servidor: ${e.getMessage}") // Imprime detalles del error
Left("Error interno del servidor")
}
} catch {
case e: Exception =>
println(s"Error interno del servidor: ${e.getMessage}") // Imprime detalles del error
Left("Error interno del servidor")
}
}
}

def guardarArchivo(nombre: String, ruta: String, tamano: Double, usuario_id: Int): Future[Either[String, FileModel]] = {
Future {
try {
val result = sql"INSERT INTO archivos (nombre, ruta, tamano, usuario_id, habilitado) VALUES ($nombre, $ruta, $tamano, $usuario_id, true)"
.update()

if (result > 0) {
// Recupera el ID generado por la base de datos
val generatedId: Long = sql"SELECT LAST_INSERT_ID()".map(rs => rs.long(1)).single().getOrElse(0L)

// Crea una instancia de DirectoryModel con el ID real
val archivo = FileModel(generatedId.toInt, nombre, ruta, tamano, usuario_id, true)
Right(archivo)
} else {
Left("No se pudo agregar el archivo")
def guardarArchivo(
nombre: String,
ruta: String,
tamano: Double,
usuario_id: Int
): Future[Either[String, FileModel]] = {
Future {
try {
val result =
sql"INSERT INTO archivos (nombre, ruta, tamano, usuario_id, habilitado) VALUES ($nombre, $ruta, $tamano, $usuario_id, true)"
.update()

if (result > 0) {
// Recupera el ID generado por la base de datos
val generatedId: Long = sql"SELECT LAST_INSERT_ID()".map(rs => rs.long(1)).single().getOrElse(0L)

// Crea una instancia de DirectoryModel con el ID real
val archivo = FileModel(generatedId.toInt, nombre, ruta, tamano, usuario_id, true)
Right(archivo)
} else {
Left("No se pudo agregar el archivo")
}
} catch {
case e: Exception =>
println(s"Error interno del servidor: ${e.getMessage}")
Left("Error interno del servidor")
}
} catch {
case e: Exception =>
println(s"Error interno del servidor: ${e.getMessage}")
Left("Error interno del servidor")
}
}
}
def moverArchivo(id: Int, nuevaRuta: String): Future[Either[String, FileModel]] = {
Future {
try {
Expand Down Expand Up @@ -130,13 +143,14 @@ class FileController {
}

def reporteEspacio(usuario_id: Int): Future[Either[String, FileReportModel]] = {
Future {
Future {
try {
val resultado = sql"SELECT usuario_id, SUM(tamano) AS espacio FROM archivos WHERE usuario_id = $usuario_id"
.map { rs =>

FileReportModel(rs.int("usuario_id"), rs.double("espacio"))
}.single().map { file =>
}
.single()
.map { file =>
// Respuesta exitosa con estado 200 y JSON de usuario
Right(file)
}
Expand All @@ -145,29 +159,37 @@ class FileController {
// Usuario no encontrado con código 404
Left("Error en el reporte")
}
} catch {
case e: Exception =>
println(s"Error interno del servidor: ${e.getMessage}") // Imprime detalles del error
Left("Error interno del servidor")
}
} catch {
case e: Exception =>
println(s"Error interno del servidor: ${e.getMessage}") // Imprime detalles del error
Left("Error interno del servidor")
}
}
}
def obtenerArchivosPorUsuario(usuario_id: Int): Future[Either[String, List[FileModel]]] = {
Future {
try {
val archivos = sql"SELECT * FROM archivos WHERE habilitado = true AND usuario_id = $usuario_id".map { rs =>
FileModel(rs.int("id"), rs.string("nombre"), rs.string("ruta"), rs.double("tamano"), rs.int("usuario_id"), rs.boolean("habilitado"))
}.list()

// Respuesta exitosa con estado 200 y lista de archivos
Right(archivos)
} catch {
case e: Exception =>
println(s"Error interno del servidor: ${e.getMessage}") // Imprime detalles del error
Left("Error interno del servidor")
Future {
try {
val archivos = sql"SELECT * FROM archivos WHERE habilitado = true AND usuario_id = $usuario_id"
.map { rs =>
FileModel(
rs.int("id"),
rs.string("nombre"),
rs.string("ruta"),
rs.double("tamano"),
rs.int("usuario_id"),
rs.boolean("habilitado")
)
}
.list()

// Respuesta exitosa con estado 200 y lista de archivos
Right(archivos)
} catch {
case e: Exception =>
println(s"Error interno del servidor: ${e.getMessage}") // Imprime detalles del error
Left("Error interno del servidor")
}
}
}
}


}
Loading

0 comments on commit 7cb8449

Please sign in to comment.