From 27bfbea0daff6f92fcf7341ad47bb361d1502073 Mon Sep 17 00:00:00 2001 From: Julien Veyssier Date: Wed, 11 Sep 2024 23:58:26 +0200 Subject: [PATCH] rename columns in bill table Signed-off-by: Julien Veyssier --- appinfo/info.xml | 2 +- lib/Command/DeleteBills.php | 2 +- lib/Db/Bill.php | 101 +++++++------- lib/Db/BillMapper.php | 119 +++++++--------- lib/Db/BillOwer.php | 4 +- lib/Db/MemberMapper.php | 2 +- lib/Db/ProjectMapper.php | 14 +- .../Version030000Date20240911230019.php | 128 ++++++++++++++++++ .../Version030000Date20240911230034.php | 74 ++++++++++ lib/Service/LocalProjectService.php | 55 ++++---- 10 files changed, 346 insertions(+), 155 deletions(-) create mode 100644 lib/Migration/Version030000Date20240911230019.php create mode 100644 lib/Migration/Version030000Date20240911230034.php diff --git a/appinfo/info.xml b/appinfo/info.xml index 35155981..8e13dca9 100644 --- a/appinfo/info.xml +++ b/appinfo/info.xml @@ -3,7 +3,7 @@ cospend Cospend - 3.0.0 + 3.0.1 agpl Julien Veyssier Cospend diff --git a/lib/Command/DeleteBills.php b/lib/Command/DeleteBills.php index e3e40cbb..c635ee9a 100644 --- a/lib/Command/DeleteBills.php +++ b/lib/Command/DeleteBills.php @@ -68,7 +68,7 @@ class DeleteBills extends Base { foreach ($billsToDelete as $bill) { $ts = $bill->getTimestamp(); $date = (new DateTime())->setTimestamp($ts)->format('c'); - $output->writeln('DELETE [' . $bill->getId() . '] ' . $bill->getWhat() . ' ; ' . $bill->getAmount() . ' ; ' . $date . ' ; ' . $bill->getPayerid()); + $output->writeln('DELETE [' . $bill->getId() . '] ' . $bill->getWhat() . ' ; ' . $bill->getAmount() . ' ; ' . $date . ' ; ' . $bill->getPayerId()); } if ($input->getOption('simulate')) { diff --git a/lib/Db/Bill.php b/lib/Db/Bill.php index 0dc52c1c..38838a5a 100644 --- a/lib/Db/Bill.php +++ b/lib/Db/Bill.php @@ -20,66 +20,66 @@ use OCP\AppFramework\Db\Entity; * @method void setWhat(string $what) * @method string|null getComment() * @method void setComment(string|null $comment) - * @method int getPayerid() - * @method void setPayerid(int $payerid) + * @method int getPayerId() + * @method void setPayerId(int $payerId) * @method float getAmount() * @method void setAmount(float $amount) * @method int getTimestamp() * @method void setTimestamp(int $timestamp) * @method string getRepeat() * @method void setRepeat(string $repeat) - * @method int getRepeatallactive() - * @method void setRepeatallactive(int $repeatallactive) - * @method string getRepeatuntil() - * @method void setRepeatuntil(string $repeatuntil) - * @method int getRepeatfreq() - * @method void setRepeatfreq(int $repeatfreq) - * @method string getProjectid() - * @method void setProjectid(string $projectid) - * @method int getCategoryid() - * @method void setCategoryid(int $categoryid) - * @method string getPaymentmode() - * @method void setPaymentmode(string $paymentmode) - * @method int getPaymentmodeid() - * @method void setPaymentmodeid(int $paymentmodeid) - * @method int getLastchanged() - * @method void setLastchanged(int $lastchanged) + * @method int getRepeatAllActive() + * @method void setRepeatAllActive(int $repeatAllActive) + * @method string|null getRepeatUntil() + * @method void setRepeatUntil(string|null $repeatUntil) + * @method int getRepeatFrequency() + * @method void setRepeatFrequency(int $repeatFrequency) + * @method string getProjectId() + * @method void setProjectId(string $projectId) + * @method int|null getCategoryId() + * @method void setCategoryId(int|null $categoryId) + * @method string|null getPaymentMode() + * @method void setPaymentMode(string|null $paymentMode) + * @method int|null getPaymentModeId() + * @method void setPaymentModeId(int|null $paymentModeId) + * @method int getLastChanged() + * @method void setLastChanged(int $lastChanged) * @method int getDeleted() * @method void setDeleted(int $deleted) */ class Bill extends Entity implements \JsonSerializable { - protected $what; - protected $comment; - protected $payerid; - protected $amount; - protected $timestamp; - protected $repeat; - protected $repeatallactive; - protected $repeatuntil; - protected $repeatfreq; - protected $projectid; - protected $categoryid; - protected $paymentmode; - protected $paymentmodeid; - protected $lastchanged; - protected $deleted; + protected string $what = ''; + protected ?string $comment = null; + protected int $payerId = 0; + protected float $amount = 0; + protected int $timestamp = 0; + protected string $repeat = 'n'; + protected int $repeatAllActive = 0; + protected ?string $repeatUntil = null; + protected int $repeatFrequency = 1; + protected string $projectId = ''; + protected ?int $categoryId = null; + protected ?string $paymentMode = null; + protected ?int $paymentModeId = 0; + protected int $lastChanged = 0; + protected int $deleted = 0; public function __construct() { $this->addType('id', 'integer'); $this->addType('what', 'string'); $this->addType('comment', 'string'); - $this->addType('payerid', 'integer'); + $this->addType('payer_id', 'integer'); $this->addType('timestamp', 'integer'); $this->addType('amount', 'float'); $this->addType('repeat', 'string'); - $this->addType('repeatallactive', 'integer'); - $this->addType('repeatuntil', 'string'); - $this->addType('repeatfreq', 'integer'); - $this->addType('projectid', 'string'); - $this->addType('categoryid', 'integer'); - $this->addType('paymentmode', 'string'); - $this->addType('paymentmodeid', 'integer'); - $this->addType('lastchanged', 'integer'); + $this->addType('repeat_all_active', 'integer'); + $this->addType('repeat_until', 'string'); + $this->addType('repeat_frequency', 'integer'); + $this->addType('project_id', 'string'); + $this->addType('category_id', 'integer'); + $this->addType('payment_mode', 'string'); + $this->addType('payment_mode_id', 'integer'); + $this->addType('last_changed', 'integer'); $this->addType('deleted', 'integer'); } @@ -87,21 +87,22 @@ class Bill extends Entity implements \JsonSerializable { public function jsonSerialize() { return [ 'id' => $this->getId(), - 'projectid' => $this->getProjectid(), + 'projectid' => $this->getProjectId(), 'what' => $this->getWhat(), 'comment' => $this->getComment() ?? '', - 'payer_id' => $this->getPayerid(), + 'payer_id' => $this->getPayerId(), 'timestamp' => $this->getTimestamp(), 'date' => DateTime::createFromFormat('U', (string)$this->getTimestamp())->format('Y-m-d'), 'amount' => $this->getAmount(), 'repeat' => $this->getRepeat(), - 'repeatallactive' => $this->getRepeatallactive(), - 'repeatuntil' => $this->getRepeatuntil(), - 'repeatfreq' => $this->getRepeatfreq(), - 'categoryid' => $this->getCategoryid(), - 'paymentmode' => $this->getPaymentmode(), - 'paymentmodeid' => $this->getPaymentmodeid(), + 'repeatallactive' => $this->getRepeatAllActive(), + 'repeatuntil' => $this->getRepeatUntil(), + 'repeatfreq' => $this->getRepeatFrequency(), + 'categoryid' => $this->getCategoryId(), + 'paymentmode' => $this->getPaymentMode(), + 'paymentmodeid' => $this->getPaymentModeId(), 'deleted' => $this->getDeleted(), + 'lastchanged' => $this->getLastChanged(), ]; } } diff --git a/lib/Db/BillMapper.php b/lib/Db/BillMapper.php index 1f124154..b024f15a 100644 --- a/lib/Db/BillMapper.php +++ b/lib/Db/BillMapper.php @@ -25,10 +25,9 @@ use OCP\IDBConnection; * @extends QBMapper */ class BillMapper extends QBMapper { - public const TABLE_NAME = 'cospend_bills'; public function __construct(IDBConnection $db) { - parent::__construct($db, self::TABLE_NAME, Bill::class); + parent::__construct($db, 'cospend_bills', Bill::class); } /** @@ -52,22 +51,6 @@ class BillMapper extends QBMapper { return $this->mapRowToEntity($row); } - public function findProjectId(int $id): string { - $qb = $this->db->getQueryBuilder(); - $qb->select('projectid') - ->from($this->getTableName()) - ->where($qb->expr()->eq('id', $qb->createNamedParameter($id, IQueryBuilder::PARAM_INT))); - $result = $qb->executeQuery(); - $row = $result->fetch(); - $result->closeCursor(); - - if ($row === false) { - throw new Exception('Bill ' . $id . ' not found'); - } - - return $row['projectid']; - } - /** * Delete bill owers of given bill * @@ -93,7 +76,7 @@ class BillMapper extends QBMapper { $qb2->select('id') ->from($this->getTableName()) ->where( - $qb2->expr()->eq('projectid', $qb->createNamedParameter($projectId, IQueryBuilder::PARAM_STR)) + $qb2->expr()->eq('project_id', $qb->createNamedParameter($projectId, IQueryBuilder::PARAM_STR)) ) ->andWhere( $qb->expr()->eq('deleted', $qb->createNamedParameter(1, IQueryBuilder::PARAM_INT)) @@ -109,7 +92,7 @@ class BillMapper extends QBMapper { $qb = $this->db->getQueryBuilder(); $qb->delete($this->getTableName()) ->where( - $qb->expr()->eq('projectid', $qb->createNamedParameter($projectId, IQueryBuilder::PARAM_STR)) + $qb->expr()->eq('project_id', $qb->createNamedParameter($projectId, IQueryBuilder::PARAM_STR)) ) ->andWhere( $qb->expr()->eq('deleted', $qb->createNamedParameter(1, IQueryBuilder::PARAM_INT)) @@ -132,7 +115,7 @@ class BillMapper extends QBMapper { $qb2->select('id') ->from($this->getTableName()) ->where( - $qb2->expr()->eq('projectid', $qb->createNamedParameter($projectId, IQueryBuilder::PARAM_STR)) + $qb2->expr()->eq('project_id', $qb->createNamedParameter($projectId, IQueryBuilder::PARAM_STR)) ); if ($what !== null) { $qb2->andWhere( @@ -156,7 +139,7 @@ class BillMapper extends QBMapper { // delete the bills $qb->delete($this->getTableName()) ->where( - $qb->expr()->eq('projectid', $qb->createNamedParameter($projectId, IQueryBuilder::PARAM_STR)) + $qb->expr()->eq('project_id', $qb->createNamedParameter($projectId, IQueryBuilder::PARAM_STR)) ); if ($what !== null) { $qb->andWhere( @@ -187,7 +170,7 @@ class BillMapper extends QBMapper { $qb->update($this->getTableName()) ->set('deleted', $qb->createNamedParameter(1, IQueryBuilder::PARAM_INT)) ->where( - $qb->expr()->eq('projectid', $qb->createNamedParameter($projectId, IQueryBuilder::PARAM_STR)) + $qb->expr()->eq('project_id', $qb->createNamedParameter($projectId, IQueryBuilder::PARAM_STR)) ); if ($what !== null) { $qb->andWhere( @@ -218,7 +201,7 @@ class BillMapper extends QBMapper { $qb->select('*') ->from($this->getTableName()) ->where( - $qb->expr()->eq('projectid', $qb->createNamedParameter($projectId, IQueryBuilder::PARAM_STR)) + $qb->expr()->eq('project_id', $qb->createNamedParameter($projectId, IQueryBuilder::PARAM_STR)) ); if ($what !== null) { $qb->andWhere( @@ -247,7 +230,7 @@ class BillMapper extends QBMapper { $qb->expr()->eq('id', $qb->createNamedParameter($billId, IQueryBuilder::PARAM_INT)) ) ->andWhere( - $qb->expr()->eq('projectid', $qb->createNamedParameter($projectId, IQueryBuilder::PARAM_STR)) + $qb->expr()->eq('project_id', $qb->createNamedParameter($projectId, IQueryBuilder::PARAM_STR)) ); try { @@ -357,24 +340,24 @@ class BillMapper extends QBMapper { bool $reverse = false, ?int $payerId = null, ?int $deleted = 0 ): array { $qb = $this->db->getQueryBuilder(); - $qb->select('bi.id', 'what', 'comment', 'timestamp', 'amount', 'payerid', 'repeat', - 'paymentmode', 'paymentmodeid', 'categoryid', 'bi.lastchanged', 'repeatallactive', 'repeatuntil', 'repeatfreq', + $qb->select('bi.id', 'what', 'comment', 'timestamp', 'amount', 'payer_id', 'repeat', + 'payment_mode', 'payment_mode_id', 'category_id', 'bi.last_changed', 'repeat_all_active', 'repeat_until', 'repeat_frequency', 'deleted', 'memberid', 'm.name', 'm.weight', 'm.activated') ->from('cospend_bill_owers', 'bo') ->innerJoin('bo', 'cospend_bills', 'bi', $qb->expr()->eq('bo.billid', 'bi.id')) ->innerJoin('bo', 'cospend_members', 'm', $qb->expr()->eq('bo.memberid', 'm.id')) ->where( - $qb->expr()->eq('bi.projectid', $qb->createNamedParameter($projectId, IQueryBuilder::PARAM_STR)) + $qb->expr()->eq('bi.project_id', $qb->createNamedParameter($projectId, IQueryBuilder::PARAM_STR)) ); // take bills that have changed after $lastchanged if ($lastchanged !== null) { $qb->andWhere( - $qb->expr()->gt('bi.lastchanged', $qb->createNamedParameter($lastchanged, IQueryBuilder::PARAM_INT)) + $qb->expr()->gt('bi.last_changed', $qb->createNamedParameter($lastchanged, IQueryBuilder::PARAM_INT)) ); } if ($payerId !== null) { $qb->andWhere( - $qb->expr()->eq('bi.payerid', $qb->createNamedParameter($payerId, IQueryBuilder::PARAM_INT)) + $qb->expr()->eq('bi.payer_id', $qb->createNamedParameter($payerId, IQueryBuilder::PARAM_INT)) ); } if ($tsMin !== null) { @@ -394,22 +377,22 @@ class BillMapper extends QBMapper { } if ($paymentMode !== null && $paymentMode !== '' && $paymentMode !== 'n') { $qb->andWhere( - $qb->expr()->eq('paymentmode', $qb->createNamedParameter($paymentMode, IQueryBuilder::PARAM_STR)) + $qb->expr()->eq('payment_mode', $qb->createNamedParameter($paymentMode, IQueryBuilder::PARAM_STR)) ); } elseif (!is_null($paymentModeId)) { $qb->andWhere( - $qb->expr()->eq('paymentmodeid', $qb->createNamedParameter($paymentModeId, IQueryBuilder::PARAM_INT)) + $qb->expr()->eq('payment_mode_id', $qb->createNamedParameter($paymentModeId, IQueryBuilder::PARAM_INT)) ); } if ($category !== null) { if ($category === -100) { $or = $qb->expr()->orx(); - $or->add($qb->expr()->isNull('categoryid')); - $or->add($qb->expr()->neq('categoryid', $qb->createNamedParameter(Application::CATEGORY_REIMBURSEMENT, IQueryBuilder::PARAM_INT))); + $or->add($qb->expr()->isNull('category_id')); + $or->add($qb->expr()->neq('category_id', $qb->createNamedParameter(Application::CATEGORY_REIMBURSEMENT, IQueryBuilder::PARAM_INT))); $qb->andWhere($or); } else { $qb->andWhere( - $qb->expr()->eq('categoryid', $qb->createNamedParameter($category, IQueryBuilder::PARAM_INT)) + $qb->expr()->eq('category_id', $qb->createNamedParameter($category, IQueryBuilder::PARAM_INT)) ); } } @@ -502,17 +485,17 @@ class BillMapper extends QBMapper { $qb->select('*') ->from($this->getTableName(), 'bi') ->where( - $qb->expr()->eq('projectid', $qb->createNamedParameter($projectId, IQueryBuilder::PARAM_STR)) + $qb->expr()->eq('project_id', $qb->createNamedParameter($projectId, IQueryBuilder::PARAM_STR)) ); // take bills that have changed after $lastchanged if ($lastchanged !== null) { $qb->andWhere( - $qb->expr()->gt('lastchanged', $qb->createNamedParameter($lastchanged, IQueryBuilder::PARAM_INT)) + $qb->expr()->gt('last_changed', $qb->createNamedParameter($lastchanged, IQueryBuilder::PARAM_INT)) ); } if ($payerId !== null) { $qb->andWhere( - $qb->expr()->eq('payerid', $qb->createNamedParameter($payerId, IQueryBuilder::PARAM_INT)) + $qb->expr()->eq('payer_id', $qb->createNamedParameter($payerId, IQueryBuilder::PARAM_INT)) ); } if ($tsMin !== null) { @@ -532,22 +515,22 @@ class BillMapper extends QBMapper { } if ($paymentMode !== null && $paymentMode !== '' && $paymentMode !== 'n') { $qb->andWhere( - $qb->expr()->eq('paymentmode', $qb->createNamedParameter($paymentMode, IQueryBuilder::PARAM_STR)) + $qb->expr()->eq('payment_mode', $qb->createNamedParameter($paymentMode, IQueryBuilder::PARAM_STR)) ); } elseif (!is_null($paymentModeId)) { $qb->andWhere( - $qb->expr()->eq('paymentmodeid', $qb->createNamedParameter($paymentModeId, IQueryBuilder::PARAM_INT)) + $qb->expr()->eq('payment_mode_id', $qb->createNamedParameter($paymentModeId, IQueryBuilder::PARAM_INT)) ); } if ($category !== null) { if ($category === -100) { $or = $qb->expr()->orx(); - $or->add($qb->expr()->isNull('categoryid')); - $or->add($qb->expr()->neq('categoryid', $qb->createNamedParameter(Application::CATEGORY_REIMBURSEMENT, IQueryBuilder::PARAM_INT))); + $or->add($qb->expr()->isNull('category_id')); + $or->add($qb->expr()->neq('category_id', $qb->createNamedParameter(Application::CATEGORY_REIMBURSEMENT, IQueryBuilder::PARAM_INT))); $qb->andWhere($or); } else { $qb->andWhere( - $qb->expr()->eq('categoryid', $qb->createNamedParameter($category, IQueryBuilder::PARAM_INT)) + $qb->expr()->eq('category_id', $qb->createNamedParameter($category, IQueryBuilder::PARAM_INT)) ); } } @@ -657,14 +640,14 @@ class BillMapper extends QBMapper { $dbTimestamp = (int) $row['timestamp']; $dbDate = DateTime::createFromFormat('U', $row['timestamp']); $dbRepeat = $row['repeat']; - $dbPayerId = (int) $row['payerid']; - $dbPaymentMode = $row['paymentmode']; - $dbPaymentModeId = (int) $row['paymentmodeid']; - $dbCategoryId = (int) $row['categoryid']; - $dbLastchanged = (int) $row['lastchanged']; - $dbRepeatAllActive = (int) $row['repeatallactive']; - $dbRepeatUntil = $row['repeatuntil']; - $dbRepeatFreq = (int) $row['repeatfreq']; + $dbPayerId = (int) $row['payer_id']; + $dbPaymentMode = $row['payment_mode']; + $dbPaymentModeId = (int) $row['payment_mode_id']; + $dbCategoryId = (int) $row['category_id']; + $dbLastchanged = (int) $row['last_changed']; + $dbRepeatAllActive = (int) $row['repeat_all_active']; + $dbRepeatUntil = $row['repeat_until']; + $dbRepeatFreq = (int) $row['repeat_frequency']; $dbDeleted = (int) $row['deleted']; return [ 'id' => $dbBillId, @@ -727,14 +710,14 @@ class BillMapper extends QBMapper { $qb = $this->db->getQueryBuilder(); $qb->select( 'b.id', 'what', 'comment', 'amount', 'timestamp', - 'paymentmode', 'paymentmodeid', 'categoryid', + 'payment_mode', 'payment_mode_id', 'category_id', 'pr.currency_name', 'me.name', 'me.userid' ) ->from($this->getTableName(), 'b') ->innerJoin('b', 'cospend_projects', 'pr', $qb->expr()->eq('b.projectid', 'pr.id')) ->innerJoin('b', 'cospend_members', 'me', $qb->expr()->eq('b.payerid', 'me.id')) ->where( - $qb->expr()->eq('b.projectid', $qb->createNamedParameter($projectId, IQueryBuilder::PARAM_STR)) + $qb->expr()->eq('b.project_id', $qb->createNamedParameter($projectId, IQueryBuilder::PARAM_STR)) ); if ($deleted !== null) { $qb->andWhere( @@ -753,9 +736,9 @@ class BillMapper extends QBMapper { $dbWhat = $row['what']; $dbTimestamp = (int) $row['timestamp']; $dbComment = $row['comment']; - $dbPaymentMode = $row['paymentmode']; - $dbPaymentModeId = (int) $row['paymentmodeid']; - $dbCategoryId = (int) $row['categoryid']; + $dbPaymentMode = $row['payment_mode']; + $dbPaymentModeId = (int) $row['payment_mode_id']; + $dbCategoryId = (int) $row['category_id']; $dbProjectCurrencyName = $row['currency_name']; $dbPayerName = $row['name']; $dbPayerUserId = $row['userid']; @@ -795,7 +778,7 @@ class BillMapper extends QBMapper { $qb->selectAlias($qb->createFunction('COUNT(*)'), 'count_bills') ->from($this->getTableName()) ->where( - $qb->expr()->eq('projectid', $qb->createNamedParameter($projectId, IQueryBuilder::PARAM_STR)) + $qb->expr()->eq('project_id', $qb->createNamedParameter($projectId, IQueryBuilder::PARAM_STR)) ); if ($deleted !== null) { $qb->andWhere( @@ -804,17 +787,17 @@ class BillMapper extends QBMapper { } if ($payerId !== null) { $qb->andWhere( - $qb->expr()->eq('payerid', $qb->createNamedParameter($payerId, IQueryBuilder::PARAM_INT)) + $qb->expr()->eq('payer_id', $qb->createNamedParameter($payerId, IQueryBuilder::PARAM_INT)) ); } if ($categoryId !== null) { $qb->andWhere( - $qb->expr()->eq('categoryid', $qb->createNamedParameter($categoryId, IQueryBuilder::PARAM_INT)) + $qb->expr()->eq('category_id', $qb->createNamedParameter($categoryId, IQueryBuilder::PARAM_INT)) ); } if ($paymentModeId !== null) { $qb->andWhere( - $qb->expr()->eq('paymentmodeid', $qb->createNamedParameter($paymentModeId, IQueryBuilder::PARAM_INT)) + $qb->expr()->eq('payment_mode_id', $qb->createNamedParameter($paymentModeId, IQueryBuilder::PARAM_INT)) ); } $req = $qb->executeQuery(); @@ -836,9 +819,9 @@ class BillMapper extends QBMapper { $billIds = []; $qb = $this->db->getQueryBuilder(); $qb->select('id') - ->from(self::TABLE_NAME, 'b') + ->from($this->getTableName(), 'b') ->where( - $qb->expr()->eq('projectid', $qb->createNamedParameter($projectId, IQueryBuilder::PARAM_STR)) + $qb->expr()->eq('project_id', $qb->createNamedParameter($projectId, IQueryBuilder::PARAM_STR)) ); if ($deleted !== null) { $qb->andWhere( @@ -864,12 +847,12 @@ class BillMapper extends QBMapper { public function removePaymentModeInProject(string $projectId, int $pmId): int { $qb = $this->db->getQueryBuilder(); $qb->update($this->getTableName()); - $qb->set('paymentmodeid', $qb->createNamedParameter(0, IQueryBuilder::PARAM_INT)) + $qb->set('payment_mode_id', $qb->createNamedParameter(0, IQueryBuilder::PARAM_INT)) ->where( - $qb->expr()->eq('paymentmodeid', $qb->createNamedParameter($pmId, IQueryBuilder::PARAM_INT)) + $qb->expr()->eq('payment_mode_id', $qb->createNamedParameter($pmId, IQueryBuilder::PARAM_INT)) ) ->andWhere( - $qb->expr()->eq('projectid', $qb->createNamedParameter($projectId, IQueryBuilder::PARAM_STR)) + $qb->expr()->eq('project_id', $qb->createNamedParameter($projectId, IQueryBuilder::PARAM_STR)) ); return $qb->executeStatement(); } @@ -883,12 +866,12 @@ class BillMapper extends QBMapper { public function removeCategoryInProject(string $projectId, int $categoryId): int { $qb = $this->db->getQueryBuilder(); $qb->update($this->getTableName()); - $qb->set('categoryid', $qb->createNamedParameter(0, IQueryBuilder::PARAM_INT)) + $qb->set('category_id', $qb->createNamedParameter(0, IQueryBuilder::PARAM_INT)) ->where( - $qb->expr()->eq('categoryid', $qb->createNamedParameter($categoryId, IQueryBuilder::PARAM_INT)) + $qb->expr()->eq('category_id', $qb->createNamedParameter($categoryId, IQueryBuilder::PARAM_INT)) ) ->andWhere( - $qb->expr()->eq('projectid', $qb->createNamedParameter($projectId, IQueryBuilder::PARAM_STR)) + $qb->expr()->eq('project_id', $qb->createNamedParameter($projectId, IQueryBuilder::PARAM_STR)) ); return $qb->executeStatement(); } diff --git a/lib/Db/BillOwer.php b/lib/Db/BillOwer.php index 6784239c..c5a04258 100644 --- a/lib/Db/BillOwer.php +++ b/lib/Db/BillOwer.php @@ -22,8 +22,8 @@ use OCP\AppFramework\Db\Entity; **/ class BillOwer extends Entity implements \JsonSerializable { - protected int $billid; - protected int $memberid; + protected int $billid = 0; + protected int $memberid = 0; public function __construct() { $this->addType('id', 'integer'); diff --git a/lib/Db/MemberMapper.php b/lib/Db/MemberMapper.php index e85c67de..dbc4b45c 100644 --- a/lib/Db/MemberMapper.php +++ b/lib/Db/MemberMapper.php @@ -152,7 +152,7 @@ class MemberMapper extends QBMapper { ->innerJoin('bo', 'cospend_bills', 'bi', $qb->expr()->eq('bo.billid', 'bi.id')) ->innerJoin('bo', self::TABLE_NAME, 'm', $qb->expr()->eq('bo.memberid', 'm.id')); $or = $qb->expr()->orx(); - $or->add($qb->expr()->eq('bi.payerid', $qb->createNamedParameter($memberId, IQueryBuilder::PARAM_INT))); + $or->add($qb->expr()->eq('bi.payer_id', $qb->createNamedParameter($memberId, IQueryBuilder::PARAM_INT))); $or->add($qb->expr()->eq('bo.memberid', $qb->createNamedParameter($memberId, IQueryBuilder::PARAM_INT))); $qb->where($or); if ($deleted !== null) { diff --git a/lib/Db/ProjectMapper.php b/lib/Db/ProjectMapper.php index c622fa06..8d007928 100644 --- a/lib/Db/ProjectMapper.php +++ b/lib/Db/ProjectMapper.php @@ -70,7 +70,7 @@ class ProjectMapper extends QBMapper { try { return $this->findEntity($qb); - } catch (DoesNotExistException | MultipleObjectsReturnedException |\OCP\DB\Exception $e) { + } catch (DoesNotExistException | MultipleObjectsReturnedException |Exception $e) { return null; } } @@ -135,7 +135,7 @@ class ProjectMapper extends QBMapper { /** * @param string $userId * @return Project[] - * @throws \OCP\DB\Exception + * @throws Exception */ public function getProjects(string $userId): array { $qb = $this->db->getQueryBuilder(); @@ -152,14 +152,14 @@ class ProjectMapper extends QBMapper { /** * @param string $projectId * @return void - * @throws \OCP\DB\Exception + * @throws Exception */ public function deleteBillOwersOfProject(string $projectId): void { // old style /* $query = 'DELETE FROM `*PREFIX*cospend_bill_owers` WHERE `billid` IN ( - SELECT `id` FROM `*PREFIX*cospend_bills` WHERE `projectid` = ? + SELECT `id` FROM `*PREFIX*cospend_bills` WHERE `project_id` = ? )'; $this->db->executeQuery($query, [$projectId]); */ @@ -171,7 +171,7 @@ class ProjectMapper extends QBMapper { $qb2->select('id') ->from('cospend_bills') ->where( - $qb2->expr()->eq('projectid', $qb->createNamedParameter($projectId, IQueryBuilder::PARAM_STR)) + $qb2->expr()->eq('project_id', $qb->createNamedParameter($projectId, IQueryBuilder::PARAM_STR)) ); $qb->delete('cospend_bill_owers') @@ -187,12 +187,12 @@ class ProjectMapper extends QBMapper { * @param string $projectId * @param int $timestamp * @return void - * @throws \OCP\DB\Exception + * @throws Exception */ public function updateProjectLastChanged(string $projectId, int $timestamp): void { $qb = $this->db->getQueryBuilder(); $qb->update($this->getTableName()); - $qb->set('lastchanged', $qb->createNamedParameter($timestamp, IQueryBuilder::PARAM_INT)); + $qb->set('last_changed', $qb->createNamedParameter($timestamp, IQueryBuilder::PARAM_INT)); $qb->where( $qb->expr()->eq('id', $qb->createNamedParameter($projectId, IQueryBuilder::PARAM_STR)) ); diff --git a/lib/Migration/Version030000Date20240911230019.php b/lib/Migration/Version030000Date20240911230019.php new file mode 100644 index 00000000..6198ce45 --- /dev/null +++ b/lib/Migration/Version030000Date20240911230019.php @@ -0,0 +1,128 @@ +hasTable('cospend_bills')) { + $table = $schema->getTable('cospend_bills'); + // rename columns + if (!$table->hasColumn('project_id')) { + $table->addColumn('project_id', Types::STRING, [ + 'notnull' => true, + 'length' => 64, + ]); + $schemaChanged = true; + } + if (!$table->hasColumn('payer_id')) { + $table->addColumn('payer_id', Types::BIGINT, [ + 'notnull' => true, + 'unsigned' => true, + ]); + $schemaChanged = true; + } + if (!$table->hasColumn('category_id')) { + $table->addColumn('category_id', Types::BIGINT, [ + 'notnull' => false, + 'default' => null, + 'unsigned' => true, + ]); + $schemaChanged = true; + } + if (!$table->hasColumn('payment_mode_id')) { + $table->addColumn('payment_mode_id', Types::BIGINT, [ + 'notnull' => false, + 'default' => 0, + 'unsigned' => true, + ]); + $schemaChanged = true; + } + if (!$table->hasColumn('payment_mode')) { + $table->addColumn('payment_mode', Types::STRING, [ + 'notnull' => false, + 'length' => 1, + 'default' => null, + ]); + $schemaChanged = true; + } + if (!$table->hasColumn('last_changed')) { + $table->addColumn('last_changed', Types::BIGINT, [ + 'notnull' => true, + 'unsigned' => true, + 'default' => 0, + ]); + $schemaChanged = true; + } + if (!$table->hasColumn('repeat_all_active')) { + $table->addColumn('repeat_all_active', Types::INTEGER, [ + 'notnull' => true, + 'default' => 0, + ]); + $schemaChanged = true; + } + if (!$table->hasColumn('repeat_until')) { + $table->addColumn('repeat_until', Types::INTEGER, [ + 'notnull' => false, + 'default' => null, + 'length' => 20, + ]); + $schemaChanged = true; + } + if (!$table->hasColumn('repeat_frequency')) { + $table->addColumn('repeat_frequency', Types::INTEGER, [ + 'notnull' => true, + 'default' => 1, + ]); + $schemaChanged = true; + } + } + + return $schemaChanged ? $schema : null; + } + + /** + * @param IOutput $output + * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` + * @param array $options + */ + public function postSchemaChange(IOutput $output, Closure $schemaClosure, array $options) { + $qb = $this->connection->getQueryBuilder(); + $qb->update('cospend_bills'); + $qb->set('project_id', 'projectid'); + $qb->set('payer_id', 'payerid'); + $qb->set('category_id', 'categoryid'); + $qb->set('payment_mode_id', 'paymentmodeid'); + $qb->set('payment_mode', 'paymentmode'); + $qb->set('last_changed', 'lastchanged'); + $qb->set('repeat_all_active', 'repeatallactive'); + $qb->set('repeat_until', 'repeatuntil'); + $qb->set('repeat_frequency', 'repeatfreq'); + $qb->executeStatement(); + } +} diff --git a/lib/Migration/Version030000Date20240911230034.php b/lib/Migration/Version030000Date20240911230034.php new file mode 100644 index 00000000..a8d0f0ba --- /dev/null +++ b/lib/Migration/Version030000Date20240911230034.php @@ -0,0 +1,74 @@ +hasTable('cospend_bills')) { + $table = $schema->getTable('cospend_bills'); + // drop columns that have been renamed + if ($table->hasColumn('project_id') && $table->hasColumn('projectid')) { + $table->dropColumn('projectid'); + $schemaChanged = true; + } + if ($table->hasColumn('payer_id') && $table->hasColumn('payerid')) { + $table->dropColumn('payerid'); + $schemaChanged = true; + } + if ($table->hasColumn('category_id') && $table->hasColumn('categoryid')) { + $table->dropColumn('categoryid'); + $schemaChanged = true; + } + if ($table->hasColumn('payment_mode_id') && $table->hasColumn('paymentmodeid')) { + $table->dropColumn('paymentmodeid'); + $schemaChanged = true; + } + if ($table->hasColumn('payment_mode') && $table->hasColumn('paymentmode')) { + $table->dropColumn('paymentmode'); + $schemaChanged = true; + } + if ($table->hasColumn('repeat_all_active') && $table->hasColumn('repeatallactive')) { + $table->dropColumn('repeatallactive'); + $schemaChanged = true; + } + if ($table->hasColumn('repeat_until') && $table->hasColumn('repeatuntil')) { + $table->dropColumn('repeatuntil'); + $schemaChanged = true; + } + if ($table->hasColumn('repeat_frequency') && $table->hasColumn('repeatfreq')) { + $table->dropColumn('repeatfreq'); + $schemaChanged = true; + } + if ($table->hasColumn('last_changed') && $table->hasColumn('lastchanged')) { + $table->dropColumn('lastchanged'); + $schemaChanged = true; + } + } + + return $schemaChanged ? $schema : null; + } +} diff --git a/lib/Service/LocalProjectService.php b/lib/Service/LocalProjectService.php index dbc7ba78..dc92d1c8 100644 --- a/lib/Service/LocalProjectService.php +++ b/lib/Service/LocalProjectService.php @@ -293,7 +293,7 @@ class LocalProjectService implements IProjectService { $this->projectMapper->deleteBillOwersOfProject($projectId); $associatedTableNames = [ - 'cospend_bills', + // 'cospend_bills', 'cospend_members', 'cospend_shares', 'cospend_currencies', @@ -310,6 +310,11 @@ class LocalProjectService implements IProjectService { $qb->executeStatement(); $qb = $this->db->getQueryBuilder(); } + $qb->delete('cospend_bills') + ->where( + $qb->expr()->eq('project_id', $qb->createNamedParameter($projectId, IQueryBuilder::PARAM_STR)) + ); + $qb->executeStatement(); $this->projectMapper->delete($dbProjectToDelete); } @@ -396,7 +401,7 @@ class LocalProjectService implements IProjectService { $qb->selectAlias($qb->createFunction('SUM(amount)'), 'sum_amount') ->from('cospend_bills') ->where( - $qb->expr()->eq('projectid', $qb->createNamedParameter($projectId, IQueryBuilder::PARAM_STR)) + $qb->expr()->eq('project_id', $qb->createNamedParameter($projectId, IQueryBuilder::PARAM_STR)) ) ->andWhere( $qb->expr()->eq('deleted', $qb->createNamedParameter(0, IQueryBuilder::PARAM_INT)) @@ -975,22 +980,22 @@ class LocalProjectService implements IProjectService { $ts = (new DateTime())->getTimestamp(); $newBill = new Bill(); - $newBill->setProjectid($projectId); + $newBill->setProjectId($projectId); $newBill->setWhat($what); if ($comment !== null) { $newBill->setComment($comment); } $newBill->setTimestamp($dateTs); $newBill->setAmount($amount); - $newBill->setPayerid($payer); + $newBill->setPayerId($payer); $newBill->setRepeat($repeat); - $newBill->setRepeatallactive($repeatAllActive); - $newBill->setRepeatuntil($repeatUntil); - $newBill->setRepeatfreq($repeatFreq ?? 1); - $newBill->setCategoryid($categoryId ?? 0); - $newBill->setPaymentmode($paymentMode ?? 'n'); - $newBill->setPaymentmodeid($paymentModeId ?? 0); - $newBill->setLastchanged($ts); + $newBill->setRepeatAllActive($repeatAllActive); + $newBill->setRepeatUntil($repeatUntil); + $newBill->setRepeatFrequency($repeatFreq ?? 1); + $newBill->setCategoryId($categoryId ?? 0); + $newBill->setPaymentMode($paymentMode ?? 'n'); + $newBill->setPaymentModeId($paymentModeId ?? 0); + $newBill->setLastChanged($ts); $newBill->setDeleted($deleted); $createdBill = $this->billMapper->insert($newBill); @@ -1796,11 +1801,11 @@ class LocalProjectService implements IProjectService { $jsonElementsById = []; if ($getCategories) { - $billTableField = 'categoryid'; + $billTableField = 'category_id'; $dbTable = 'cospend_categories'; $alias = 'cat'; } else { - $billTableField = 'paymentmodeid'; + $billTableField = 'payment_mode_id'; $dbTable = 'cospend_paymentmodes'; $alias = 'pm'; } @@ -2178,7 +2183,7 @@ class LocalProjectService implements IProjectService { // UPDATE // set last modification timestamp $ts = (new DateTime())->getTimestamp(); - $dbBill->setLastchanged($ts); + $dbBill->setLastChanged($ts); if ($what !== null) { $dbBill->setWhat($what); } @@ -2194,13 +2199,13 @@ class LocalProjectService implements IProjectService { } } if ($repeatFreq !== null) { - $dbBill->setRepeatfreq($repeatFreq); + $dbBill->setRepeatFrequency($repeatFreq); } if ($repeatUntil !== null) { - $dbBill->setRepeatuntil($repeatUntil === '' ? null : $repeatUntil); + $dbBill->setRepeatUntil($repeatUntil === '' ? null : $repeatUntil); } if ($repeatAllActive !== null) { - $dbBill->setRepeatallactive($repeatAllActive); + $dbBill->setRepeatAllActive($repeatAllActive); } // payment mode if ($paymentModeId !== null) { @@ -2212,8 +2217,8 @@ class LocalProjectService implements IProjectService { ) { $paymentMode = $this->paymentModes[$paymentModeId]['old_id']; } - $dbBill->setPaymentmodeid($paymentModeId); - $dbBill->setPaymentmode($paymentMode); + $dbBill->setPaymentModeId($paymentModeId); + $dbBill->setPaymentMode($paymentMode); } elseif ($paymentMode !== null) { // is there a pm with this old id? if yes, use it for new id $paymentModeId = 0; @@ -2223,11 +2228,11 @@ class LocalProjectService implements IProjectService { break; } } - $dbBill->setPaymentmodeid($paymentModeId); - $dbBill->setPaymentmode($paymentMode); + $dbBill->setPaymentModeId($paymentModeId); + $dbBill->setPaymentMode($paymentMode); } if ($categoryId !== null) { - $dbBill->setCategoryid($categoryId); + $dbBill->setCategoryId($categoryId); } // priority to timestamp (moneybuster might send both for a moment) if ($timestamp !== null) { @@ -2243,7 +2248,7 @@ class LocalProjectService implements IProjectService { $dbBill->setAmount($amount); } if ($payer !== null) { - $dbBill->setPayerid($payer); + $dbBill->setPayerId($payer); } $this->billMapper->update($dbBill); @@ -2357,8 +2362,8 @@ class LocalProjectService implements IProjectService { // get bills with repetition flag $bills = $this->billMapper->getBillsToRepeat($billId); foreach ($bills as $bill) { - if (!isset($timezoneByProjectId[$bill->getProjectid()])) { - $timezoneByProjectId[$bill->getProjectid()] = $this->getProjectTimeZone($bill->getProjectid()); + if (!isset($timezoneByProjectId[$bill->getProjectId()])) { + $timezoneByProjectId[$bill->getProjectId()] = $this->getProjectTimeZone($bill->getProjectId()); } } $jsonBills = array_map(function (Bill $bill) {