diff --git a/dbs/clinica.mv.db b/dbs/clinica.mv.db index fa70ead..4f85ca0 100644 Binary files a/dbs/clinica.mv.db and b/dbs/clinica.mv.db differ diff --git a/dbs/clinica.trace.db b/dbs/clinica.trace.db index dde09dd..8bb7cde 100644 --- a/dbs/clinica.trace.db +++ b/dbs/clinica.trace.db @@ -848,3 +848,75 @@ show tables from paciente [90001-240] at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1239) at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1194) at java.base/java.lang.Thread.run(Thread.java:1474) +2026-03-22 16:53:23.306218-03:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "select id from medico where medico [*]name = 'Jonas Salk';\000d\000a"; SQL statement: +select id from medico where medico name = 'Jonas Salk'; + [42000-240] +2026-03-22 16:53:36.277419-03:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "name" not found; SQL statement: +select id from medico where name = 'Jonas Salk'; + [42122-240] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.expression.ExpressionColumn.getColumnException(ExpressionColumn.java:244) + at org.h2.expression.ExpressionColumn.optimizeOther(ExpressionColumn.java:226) + at org.h2.expression.ExpressionColumn.optimize(ExpressionColumn.java:213) + at org.h2.expression.condition.Comparison.optimize(Comparison.java:148) + at org.h2.expression.Expression.optimizeCondition(Expression.java:149) + at org.h2.command.query.Select.prepareExpressions(Select.java:1215) + at org.h2.command.query.Query.prepare(Query.java:235) + at org.h2.command.Parser.prepareCommand(Parser.java:492) + at org.h2.engine.SessionLocal.prepareLocal(SessionLocal.java:647) + at org.h2.engine.SessionLocal.prepareCommand(SessionLocal.java:563) + at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1160) + at org.h2.jdbc.JdbcStatement.executeQuery(JdbcStatement.java:94) + at com.zaxxer.hikari.pool.ProxyStatement.executeQuery(ProxyStatement.java:111) + at com.zaxxer.hikari.pool.HikariProxyStatement.executeQuery(HikariProxyStatement.java) + at org.netuno.tritao.dev.Query._main(Query.java:122) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) + at java.base/java.lang.reflect.Method.invoke(Method.java:565) + at org.netuno.proteu.Run.execute(Run.java:119) + at org.netuno.proteu.DynamicURL.build(DynamicURL.java:169) + at org.netuno.proteu.Enterprise.processRequest(Enterprise.java:418) + at org.netuno.proteu.Enterprise.service(Enterprise.java:486) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:723) + at org.eclipse.jetty.ee11.servlet.ServletHolder$NotAsync.service(ServletHolder.java:1384) + at org.eclipse.jetty.ee11.servlet.ServletHolder.handle(ServletHolder.java:750) + at org.eclipse.jetty.ee11.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1668) + at org.eclipse.jetty.ee11.websocket.servlet.WebSocketUpgradeFilter.doFilter(WebSocketUpgradeFilter.java:199) + at org.eclipse.jetty.ee11.servlet.FilterHolder.doFilter(FilterHolder.java:205) + at org.eclipse.jetty.ee11.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1640) + at org.eclipse.jetty.ee11.servlet.ServletHandler$MappedServlet.handle(ServletHandler.java:1602) + at org.eclipse.jetty.ee11.servlet.ServletChannel.dispatch(ServletChannel.java:868) + at org.eclipse.jetty.ee11.servlet.ServletChannel.handle(ServletChannel.java:449) + at org.eclipse.jetty.ee11.servlet.ServletHandler.handle(ServletHandler.java:470) + at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:546) + at org.eclipse.jetty.ee11.servlet.SessionHandler.handle(SessionHandler.java:763) + at org.eclipse.jetty.server.handler.ContextHandler.handle(ContextHandler.java:1224) + at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:178) + at org.eclipse.jetty.server.Server.handle(Server.java:197) + at org.eclipse.jetty.server.internal.HttpChannelState$HandlerInvoker.run(HttpChannelState.java:787) + at org.eclipse.jetty.server.internal.HttpConnection.onFillable(HttpConnection.java:410) + at org.eclipse.jetty.server.internal.HttpConnection$FillableCallback.succeeded(HttpConnection.java:1805) + at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) + at org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:54) + at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:492) + at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.epcRunTask(AdaptiveExecutionStrategy.java:428) + at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:401) + at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:255) + at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.run(AdaptiveExecutionStrategy.java:204) + at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:317) + at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:1009) + at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1239) + at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1194) + at java.base/java.lang.Thread.run(Thread.java:1474) +2026-03-22 16:59:48.658798-03:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLDataException: Data conversion error converting "Cardiologia"; SQL statement: +SELECT + especialidade.* +FROM especialidade +WHERE 1 = 1 + AND especialidade.uid = 'Cardiologia' +LIMIT 1 [22018-240] diff --git a/server/services/medicos/post.in.json b/server/services/medicos/post.in.json index 507bdbd..4aa430f 100644 --- a/server/services/medicos/post.in.json +++ b/server/services/medicos/post.in.json @@ -11,13 +11,20 @@ }, "crm": { "type": "string" + }, + "especialidades": { + "type": "array", + "items": { + "type": "string" + } } }, "required": [ - "nome", "crm" + "nome", "crm", "especialidades" ], "example": { "nome": "Jonas Salk", - "crm": "203948" + "crm": "203948", + "especialidades": ["9fe6bca9-7da2-4f23-a26a-c6c20872aa6c", "d4688e22-ee5f-45d9-8526-36d53de50986"] } } diff --git a/server/services/medicos/post.js b/server/services/medicos/post.js index 9cb21f6..e3fe3e6 100644 --- a/server/services/medicos/post.js +++ b/server/services/medicos/post.js @@ -1,5 +1,18 @@ const nome = _req.getString("nome"); const crm = _req.getString("crm"); +const especialidades = _req.getList("especialidades"); + +for (const especialidade_uid of especialidades) { + const dbEspecialidade = _db.form('especialidade') + .where(_db.where('uid').equal(especialidade_uid)) + .first(); + + if (!dbEspecialidade) { + _header.status(404); + _out.json({result: false, error: true, reason: 'especialidade-não-encontrada'}); + _exec.stop(); + } +} const insertedData = _db.insertIfNotExists( 'medico', @@ -8,4 +21,21 @@ const insertedData = _db.insertIfNotExists( .set("c_r_m", crm) ); -_out.json({insertedData}) +const medico_id = _db.form('medico') + .where(_db.where('nome').equal(nome)) + .first() + .get('id'); + +for (const especialidade_uid of especialidades) { + const especialidade_id = _db.form('especialidade') + .where(_db.where('uid').equal(especialidade_uid)) + .first() + .get('id'); + + _db.insertIfNotExists( + 'medico_especialidade', + { medico_id, especialidade_id } + ); +} + +_out.json({insertedData});