Bonjour à tous,
J’ai suivi les cours sur le développement de web service Vapor et je souhaite le mettre en application. j’ai créer un mini web service qui gère des « installations » et je voudrais créer une fonction qui me permettrai de modifier une installation dans la base de données, voici le code:
import Fluent
import Vapor
struct InstallationController {
func create (req:Request) throws -> EventLoopFuture<Installation> {
let installation = try req.content.decode(Installation.self)
return installation.save(on: req.db).transform(to: installation)
}
func modifyInstallation(req: Request) throws -> EventLoopFuture<HTTPStatus>{
let database = req.db
let installationId = try req.content.decode(Installation.Modify.self).id
return Installation.find(installationId, on: database)
.unwrap(or: Abort(.badRequest))
.flatMap{ fetchedInstallation in
fetchedInstallation.name = "test"
print("le nouveau nom est test")
return fetchedInstallation.update(on: database).transform(to: .ok)
}
}
func fetchInstallations(req: Request) throws -> EventLoopFuture<[Installation]> {
return Installation.query(on: req.db).all()
}
}
extension Installation {
struct Modify : Content {
let id:UUID
}
}
Comme on peut le voir la fonction modifyInstallation trouve une installation de la base de donnée (ça sa marche) puis j’unwrap pour passé dans un flatMap qui modifie le nom de l’installation trouvé et je fini par un return de l’update dans la db seulement la la requête n’aboutit jamais. j’ai repris plus ou moins l’exemple dans la doc de Fluent :
Planet.find(..., on: database).flatMap { planet in
planet.name = "Earth"
return planet.update(on: database)
}
Donc si jamais vous avez une idées de ce qui cloche dans mon code je suis preneur =)
EDIT: En fin de compte après redémarrage d’Xcode et « kill » des processus utilisant le port 8080 le code s’avère fonctionnelle je laisse le code au besoin pour vous, et si vous avez des commentaires n’hésitez pas