25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

63 lines
1.8KB

  1. package io.github.norbipeti.gcdc.service;
  2. import discord4j.core.object.util.Snowflake;
  3. import io.github.norbipeti.gcdc.model.Session;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.jdbc.core.support.JdbcDaoSupport;
  6. import org.springframework.stereotype.Repository;
  7. import javax.annotation.PostConstruct;
  8. import javax.sql.DataSource;
  9. import java.util.List;
  10. import java.util.Map;
  11. @Repository
  12. public class SessionService extends JdbcDaoSupport {
  13. @Autowired
  14. DataSource dataSource;
  15. @PostConstruct
  16. private void initialize() {
  17. setDataSource(dataSource);
  18. }
  19. public void insertSession(Session session) {
  20. String sql = "INSERT INTO sessions(token, channel) VALUES (?, ?)";
  21. getJdbcTemplate().update(sql, session.getToken(), session.getChannel().asLong());
  22. }
  23. public Session getSession(String token) {
  24. String sql = "SELECT * FROM sessions WHERE token=? LIMIT 1";
  25. return getSession(getJdbcTemplate().queryForList(sql, token));
  26. }
  27. public Session getSession(long user) {
  28. String sql = "SELECT * FROM sessions WHERE user=? LIMIT 1";
  29. return getSession(getJdbcTemplate().queryForList(sql, user));
  30. }
  31. private Session getSession(List<Map<String, Object>> rows) {
  32. if (rows.size() == 0) return null;
  33. var row = rows.get(0);
  34. return new Session((String) row.get("token"), Snowflake.of((long) row.get("channel")),
  35. (Long) row.get("user"));
  36. }
  37. public void deleteSession(String token) {
  38. String sql = "DELETE FROM sessions WHERE token=?";
  39. getJdbcTemplate().update(sql, token);
  40. }
  41. public void deleteSession(long user) {
  42. String sql = "DELETE FROM sessions WHERE user=?";
  43. getJdbcTemplate().update(sql, user);
  44. }
  45. public void updateSession(Session session) {
  46. String sql = "UPDATE sessions SET channel=? WHERE token=?";
  47. getJdbcTemplate().update(sql, session.getChannel().asLong(), session.getToken());
  48. }
  49. }