From 41a284fc4e320d996aecf9c56fb6b27022ebd325 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Sep 2024 15:35:58 +0800 Subject: [PATCH 1/9] build(deps-dev): Bump excoveralls from 0.18.2 to 0.18.3 (#1179) Bumps [excoveralls](https://github.com/parroty/excoveralls) from 0.18.2 to 0.18.3. - [Release notes](https://github.com/parroty/excoveralls/releases) - [Changelog](https://github.com/parroty/excoveralls/blob/master/CHANGELOG.md) - [Commits](https://github.com/parroty/excoveralls/compare/v0.18.2...v0.18.3) --- updated-dependencies: - dependency-name: excoveralls dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- mix.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mix.lock b/mix.lock index 9e0975ecc..da46aca76 100644 --- a/mix.lock +++ b/mix.lock @@ -41,7 +41,7 @@ "ex_rated": {:hex, :ex_rated, "2.1.0", "d40e6fe35097b10222df2db7bb5dd801d57211bac65f29063de5f201c2a6aebc", [:mix], [{:ex2ms, "~> 1.5", [hex: :ex2ms, repo: "hexpm", optional: false]}], "hexpm", "936c155337253ed6474f06d941999dd3a9cf0fe767ec99a59f2d2989dc2cc13f"}, "ex_utils": {:hex, :ex_utils, "0.1.7", "2c133e0bcdc49a858cf8dacf893308ebc05bc5fba501dc3d2935e65365ec0bf3", [:mix], [], "hexpm", "66d4fe75285948f2d1e69c2a5ddd651c398c813574f8d36a9eef11dc20356ef6"}, "exactor": {:hex, :exactor, "2.2.4", "5efb4ddeb2c48d9a1d7c9b465a6fffdd82300eb9618ece5d34c3334d5d7245b1", [:mix], [], "hexpm", "1222419f706e01bfa1095aec9acf6421367dcfab798a6f67c54cf784733cd6b5"}, - "excoveralls": {:hex, :excoveralls, "0.18.2", "86efd87a0676a3198ff50b8c77620ea2f445e7d414afa9ec6c4ba84c9f8bdcc2", [:mix], [{:castore, "~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "230262c418f0de64077626a498bd4fdf1126d5c2559bb0e6b43deac3005225a4"}, + "excoveralls": {:hex, :excoveralls, "0.18.3", "bca47a24d69a3179951f51f1db6d3ed63bca9017f476fe520eb78602d45f7756", [:mix], [{:castore, "~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "746f404fcd09d5029f1b211739afb8fb8575d775b21f6a3908e7ce3e640724c6"}, "exjsx": {:hex, :exjsx, "4.0.0", "60548841e0212df401e38e63c0078ec57b33e7ea49b032c796ccad8cde794b5c", [:mix], [{:jsx, "~> 2.8.0", [hex: :jsx, repo: "hexpm", optional: false]}], "hexpm", "32e95820a97cffea67830e91514a2ad53b888850442d6d395f53a1ac60c82e07"}, "expo": {:hex, :expo, "0.4.1", "1c61d18a5df197dfda38861673d392e642649a9cef7694d2f97a587b2cfb319b", [:mix], [], "hexpm", "2ff7ba7a798c8c543c12550fa0e2cbc81b95d4974c65855d8d15ba7b37a1ce47"}, "exvcr": {:hex, :exvcr, "0.15.1", "772db4d065f5136c6a984c302799a79e4ade3e52701c95425fa2229dd6426886", [:mix], [{:exactor, "~> 2.2", [hex: :exactor, repo: "hexpm", optional: false]}, {:exjsx, "~> 4.0", [hex: :exjsx, repo: "hexpm", optional: false]}, {:finch, "~> 0.16", [hex: :finch, repo: "hexpm", optional: true]}, {:httpoison, "~> 1.0 or ~> 2.0", [hex: :httpoison, repo: "hexpm", optional: true]}, {:httpotion, "~> 3.1", [hex: :httpotion, repo: "hexpm", optional: true]}, {:ibrowse, "4.4.0", [hex: :ibrowse, repo: "hexpm", optional: true]}, {:meck, "~> 0.8", [hex: :meck, repo: "hexpm", optional: false]}], "hexpm", "de4fc18b1d672d9b72bc7468735e19779aa50ea963a1f859ef82cd9e294b13e3"}, From 137d94db5dd698f8217dbaec790843fc37146224 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Sep 2024 07:41:34 +0000 Subject: [PATCH 2/9] build(deps): Bump bamboo_ses from 0.4.3 to 0.4.4 (#1181) Bumps [bamboo_ses](https://github.com/kalys/bamboo_ses) from 0.4.3 to 0.4.4. - [Changelog](https://github.com/kalys/bamboo_ses/blob/master/CHANGELOG.md) - [Commits](https://github.com/kalys/bamboo_ses/commits) --- updated-dependencies: - dependency-name: bamboo_ses dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- mix.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mix.lock b/mix.lock index da46aca76..e5a97e31f 100644 --- a/mix.lock +++ b/mix.lock @@ -4,7 +4,7 @@ "artificery": {:hex, :artificery, "0.4.3", "0bc4260f988dcb9dda4b23f9fc3c6c8b99a6220a331534fdf5bf2fd0d4333b02", [:mix], [], "hexpm", "12e95333a30e20884e937abdbefa3e7f5e05609c2ba8cf37b33f000b9ffc0504"}, "bamboo": {:hex, :bamboo, "2.3.0", "d2392a2cabe91edf488553d3c70638b532e8db7b76b84b0a39e3dfe492ffd6fc", [:mix], [{:hackney, ">= 1.15.2", [hex: :hackney, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:mime, "~> 1.4 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "dd0037e68e108fd04d0e8773921512c940e35d981e097b5793543e3b2f9cd3f6"}, "bamboo_phoenix": {:hex, :bamboo_phoenix, "1.0.0", "f3cc591ffb163ed0bf935d256f1f4645cd870cf436545601215745fb9cc9953f", [:mix], [{:bamboo, ">= 2.0.0", [hex: :bamboo, repo: "hexpm", optional: false]}, {:phoenix, ">= 1.3.0", [hex: :phoenix, repo: "hexpm", optional: false]}], "hexpm", "6db88fbb26019c84a47994bb2bd879c0887c29ce6c559bc6385fd54eb8b37dee"}, - "bamboo_ses": {:hex, :bamboo_ses, "0.4.3", "58a44d5a81207d30a89a8a765aef035dd982b0f0819f2a0dcac56390f70b3254", [:mix], [{:bamboo, "~> 2.0", [hex: :bamboo, repo: "hexpm", optional: false]}, {:ex_aws, "~> 2.4", [hex: :ex_aws, repo: "hexpm", optional: false]}, {:gen_smtp, "~> 1.2.0", [hex: :gen_smtp, repo: "hexpm", optional: false]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "fa43d6d4720ddb27f70bc90a15b994e0d7d502769d2ae538a3b47a29573b7dad"}, + "bamboo_ses": {:hex, :bamboo_ses, "0.4.4", "143afad1cffe07db9c68592d41a0685a2f950d3c31369f9da6030773a61b7566", [:mix], [{:bamboo, "~> 2.0", [hex: :bamboo, repo: "hexpm", optional: false]}, {:ex_aws, "~> 2.4", [hex: :ex_aws, repo: "hexpm", optional: false]}, {:gen_smtp, "~> 1.2.0", [hex: :gen_smtp, repo: "hexpm", optional: false]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "91740b6b1ab432ca2e41274d097bcf2239149d797acb2b1c4b0d07318bf8aa7e"}, "blankable": {:hex, :blankable, "1.0.0", "89ab564a63c55af117e115144e3b3b57eb53ad43ba0f15553357eb283e0ed425", [:mix], [], "hexpm", "7cf11aac0e44f4eedbee0c15c1d37d94c090cb72a8d9fddf9f7aec30f9278899"}, "bunt": {:hex, :bunt, "0.2.1", "e2d4792f7bc0ced7583ab54922808919518d0e57ee162901a16a1b6664ef3b14", [:mix], [], "hexpm", "a330bfb4245239787b15005e66ae6845c9cd524a288f0d141c148b02603777a5"}, "bypass": {:hex, :bypass, "2.1.0", "909782781bf8e20ee86a9cabde36b259d44af8b9f38756173e8f5e2e1fabb9b1", [:mix], [{:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.0", [hex: :plug_cowboy, repo: "hexpm", optional: false]}, {:ranch, "~> 1.3", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "d9b5df8fa5b7a6efa08384e9bbecfe4ce61c77d28a4282f79e02f1ef78d96b80"}, @@ -31,7 +31,7 @@ "erlex": {:hex, :erlex, "0.2.6", "c7987d15e899c7a2f34f5420d2a2ea0d659682c06ac607572df55a43753aa12e", [:mix], [], "hexpm", "2ed2e25711feb44d52b17d2780eabf998452f6efda104877a3881c2f8c0c0c75"}, "esaml": {:hex, :esaml, "4.6.0", "8fb5a3a0d56ccfce3e081a2f72b29058511047a2abbafb64cb6f595bf7465124", [:rebar3], [{:cowboy, "< 3.0.0", [hex: :cowboy, repo: "hexpm", optional: false]}], "hexpm", "d34d0b259cd8ac8215fd2c333fac9dbbb91b5f5da5a9304508612ff3ac0afa7a"}, "ex2ms": {:hex, :ex2ms, "1.7.0", "45b9f523d0b777667ded60070d82d871a37e294f0b6c5b8eca86771f00f82ee1", [:mix], [], "hexpm", "2589eee51f81f1b1caa6d08c990b1ad409215fe6f64c73f73c67d36ed10be827"}, - "ex_aws": {:hex, :ex_aws, "2.5.4", "86c5bb870a49e0ab6f5aa5dd58cf505f09d2624ebe17530db3c1b61c88a673af", [:mix], [{:configparser_ex, "~> 4.0", [hex: :configparser_ex, repo: "hexpm", optional: true]}, {:hackney, "~> 1.16", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: true]}, {:jsx, "~> 2.8 or ~> 3.0", [hex: :jsx, repo: "hexpm", optional: true]}, {:mime, "~> 1.2 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:sweet_xml, "~> 0.7", [hex: :sweet_xml, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "e82bd0091bb9a5bb190139599f922ff3fc7aebcca4374d65c99c4e23aa6d1625"}, + "ex_aws": {:hex, :ex_aws, "2.5.5", "5dc378eff99c3c46c917b7a96a75ad0d4c300ab7250df668d0819bcd18c0213d", [:mix], [{:configparser_ex, "~> 4.0", [hex: :configparser_ex, repo: "hexpm", optional: true]}, {:hackney, "~> 1.16", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: true]}, {:jsx, "~> 2.8 or ~> 3.0", [hex: :jsx, repo: "hexpm", optional: true]}, {:mime, "~> 1.2 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:req, "~> 0.3", [hex: :req, repo: "hexpm", optional: true]}, {:sweet_xml, "~> 0.7", [hex: :sweet_xml, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ed7ee39c56012c56600e021953c6487ecce9c49320ec3b4655a15d785f221ca6"}, "ex_aws_lambda": {:hex, :ex_aws_lambda, "2.1.0", "f28bffae6dde34ba17ef815ef50a82a1e7f3af26d36fe31dbda3a7657e0de449", [:mix], [{:ex_aws, "~> 2.0", [hex: :ex_aws, repo: "hexpm", optional: false]}], "hexpm", "25608630b8b45fe22b0237696662f88be724bc89f77ee42708a5871511f531a0"}, "ex_aws_s3": {:hex, :ex_aws_s3, "2.4.0", "ce8decb6b523381812798396bc0e3aaa62282e1b40520125d1f4eff4abdff0f4", [:mix], [{:ex_aws, "~> 2.0", [hex: :ex_aws, repo: "hexpm", optional: false]}, {:sweet_xml, ">= 0.0.0", [hex: :sweet_xml, repo: "hexpm", optional: true]}], "hexpm", "85dda6e27754d94582869d39cba3241d9ea60b6aa4167f9c88e309dc687e56bb"}, "ex_aws_secretsmanager": {:hex, :ex_aws_secretsmanager, "2.0.0", "deff8c12335f0160882afeb9687e55a97fddcd7d9a82fc3a6fbb270797374773", [:mix], [{:ex_aws, "~> 2.0", [hex: :ex_aws, repo: "hexpm", optional: false]}], "hexpm", "8b2838af536c32263ff797012b29e87bad73ef34f43cfa60ebca8e84576f6d45"}, From c0d95e9df86f513b181d8604da37245e6cba8cc3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Sep 2024 07:48:34 +0000 Subject: [PATCH 3/9] build(deps): Bump sentry from 10.7.0 to 10.7.1 (#1182) Bumps [sentry](https://github.com/getsentry/sentry-elixir) from 10.7.0 to 10.7.1. - [Release notes](https://github.com/getsentry/sentry-elixir/releases) - [Changelog](https://github.com/getsentry/sentry-elixir/blob/master/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-elixir/compare/10.7.0...10.7.1) --- updated-dependencies: - dependency-name: sentry dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- mix.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mix.lock b/mix.lock index e5a97e31f..0476fd05d 100644 --- a/mix.lock +++ b/mix.lock @@ -83,7 +83,7 @@ "phoenix_template": {:hex, :phoenix_template, "1.0.4", "e2092c132f3b5e5b2d49c96695342eb36d0ed514c5b252a77048d5969330d639", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}], "hexpm", "2c0c81f0e5c6753faf5cca2f229c9709919aba34fab866d3bc05060c9c444206"}, "phoenix_view": {:hex, :phoenix_view, "2.0.4", "b45c9d9cf15b3a1af5fb555c674b525391b6a1fe975f040fb4d913397b31abf4", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}], "hexpm", "4e992022ce14f31fe57335db27a28154afcc94e9983266835bb3040243eb620b"}, "plug": {:hex, :plug, "1.16.1", "40c74619c12f82736d2214557dedec2e9762029b2438d6d175c5074c933edc9d", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "a13ff6b9006b03d7e33874945b2755253841b238c34071ed85b0e86057f8cddc"}, - "plug_cowboy": {:hex, :plug_cowboy, "2.7.1", "87677ffe3b765bc96a89be7960f81703223fe2e21efa42c125fcd0127dd9d6b2", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "02dbd5f9ab571b864ae39418db7811618506256f6d13b4a45037e5fe78dc5de3"}, + "plug_cowboy": {:hex, :plug_cowboy, "2.7.2", "fdadb973799ae691bf9ecad99125b16625b1c6039999da5fe544d99218e662e4", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "245d8a11ee2306094840c000e8816f0cbed69a23fc0ac2bcf8d7835ae019bb2f"}, "plug_crypto": {:hex, :plug_crypto, "2.1.0", "f44309c2b06d249c27c8d3f65cfe08158ade08418cf540fd4f72d4d6863abb7b", [:mix], [], "hexpm", "131216a4b030b8f8ce0f26038bc4421ae60e4bb95c5cf5395e1421437824c4fa"}, "postgrex": {:hex, :postgrex, "0.19.1", "73b498508b69aded53907fe48a1fee811be34cc720e69ef4ccd568c8715495ea", [:mix], [{:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:table, "~> 0.1.0", [hex: :table, repo: "hexpm", optional: true]}], "hexpm", "8bac7885a18f381e091ec6caf41bda7bb8c77912bb0e9285212829afe5d8a8f8"}, "quantum": {:hex, :quantum, "3.5.3", "ee38838a07761663468145f489ad93e16a79440bebd7c0f90dc1ec9850776d99", [:mix], [{:crontab, "~> 1.1", [hex: :crontab, repo: "hexpm", optional: false]}, {:gen_stage, "~> 0.14 or ~> 1.0", [hex: :gen_stage, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:telemetry_registry, "~> 0.2", [hex: :telemetry_registry, repo: "hexpm", optional: false]}], "hexpm", "500fd3fa77dcd723ed9f766d4a175b684919ff7b6b8cfd9d7d0564d58eba8734"}, @@ -91,7 +91,7 @@ "ranch": {:hex, :ranch, "1.8.0", "8c7a100a139fd57f17327b6413e4167ac559fbc04ca7448e9be9057311597a1d", [:make, :rebar3], [], "hexpm", "49fbcfd3682fab1f5d109351b61257676da1a2fdbe295904176d5e521a2ddfe5"}, "recase": {:hex, :recase, "0.8.1", "ab98cd35857a86fa5ca99036f575241d71d77d9c2ab0c39aacf1c9b61f6f7d1d", [:mix], [], "hexpm", "9fd8d63e7e43bd9ea385b12364e305778b2bbd92537e95c4b2e26fc507d5e4c2"}, "samly": {:hex, :samly, "1.4.0", "58397eb6ca96bf768655723d378e6468f95f752b547aac1504f126bbd7c9fde8", [:mix], [{:esaml, "~> 4.3", [hex: :esaml, repo: "hexpm", optional: false]}, {:plug, "~> 1.6", [hex: :plug, repo: "hexpm", optional: false]}, {:sweet_xml, "~> 0.6", [hex: :sweet_xml, repo: "hexpm", optional: false]}], "hexpm", "9cc53e043cb4508c3df2f9a4e13bc101a6835aded5cd49ee1c931158f7ce1dd6"}, - "sentry": {:hex, :sentry, "10.7.0", "22af74d002229238b027d051d2bdd26bcd9789db5fea7335170aa41de7a658ce", [:mix], [{:hackney, "~> 1.8", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: true]}, {:nimble_options, "~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:nimble_ownership, "~> 0.3.0 or ~> 1.0", [hex: :nimble_ownership, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.6", [hex: :phoenix, repo: "hexpm", optional: true]}, {:phoenix_live_view, "~> 0.20", [hex: :phoenix_live_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.6", [hex: :plug, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: true]}], "hexpm", "ca732b35480b8023db2d6dd36418a603c54bdcb9111dbcc246f9d7219669b531"}, + "sentry": {:hex, :sentry, "10.7.1", "33392222d80ccff99c503f972998d2858b4c1e5aca2219a34269b68dacba8e7d", [:mix], [{:hackney, "~> 1.8", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: true]}, {:nimble_options, "~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:nimble_ownership, "~> 0.3.0 or ~> 1.0", [hex: :nimble_ownership, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.6", [hex: :phoenix, repo: "hexpm", optional: true]}, {:phoenix_live_view, "~> 0.20", [hex: :phoenix_live_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.6", [hex: :plug, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: true]}], "hexpm", "56291312397bf2b6afab6cf4f7aa1f27413b0eb2ceeb63b8aab2d7658aaea882"}, "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.7", "354c321cf377240c7b8716899e182ce4890c5938111a1296add3ec74cf1715df", [:make, :mix, :rebar3], [], "hexpm", "fe4c190e8f37401d30167c8c405eda19469f34577987c76dde613e838bbc67f8"}, "sweet_xml": {:hex, :sweet_xml, "0.7.4", "a8b7e1ce7ecd775c7e8a65d501bc2cd933bff3a9c41ab763f5105688ef485d08", [:mix], [], "hexpm", "e7c4b0bdbf460c928234951def54fe87edf1a170f6896675443279e2dbeba167"}, "telemetry": {:hex, :telemetry, "1.3.0", "fedebbae410d715cf8e7062c96a1ef32ec22e764197f70cda73d82778d61e7a2", [:rebar3], [], "hexpm", "7015fc8919dbe63764f4b4b87a95b7c0996bd539e0d499be6ec9d7f3875b79e6"}, From 85a3c1ed4d73208a3cf75022aa3920d1ff170a7d Mon Sep 17 00:00:00 2001 From: Gabriel Chang <77312579+GabrielCWT@users.noreply.github.com> Date: Thu, 19 Sep 2024 16:55:53 +0800 Subject: [PATCH 4/9] refactor: Refactor grading related functions to use atoms (#1187) * refactor: Refactor query params to use atoms * refactor: Move param parsing to controller * refactor: Parse sort params to atoms * refactor: Refactor sort_submission functions * fix: Filter boolean params based on query params * chore: Fix formatting * fix: Update tests to use new format --- lib/cadet/assessments/assessments.ex | 172 ++++++------------ lib/cadet/helpers/shared_helper.ex | 22 +++ lib/cadet/jobs/xml_parser.ex | 15 +- .../admin_grading_controller.ex | 37 ++++ test/cadet/assessments/assessments_test.exs | 128 ++++++------- test/cadet/helpers/shared_helper_test.exs | 20 ++ 6 files changed, 205 insertions(+), 189 deletions(-) diff --git a/lib/cadet/assessments/assessments.ex b/lib/cadet/assessments/assessments.ex index 4ce8dec85..55d0dff4d 100644 --- a/lib/cadet/assessments/assessments.ex +++ b/lib/cadet/assessments/assessments.ex @@ -1888,25 +1888,14 @@ defmodule Cadet.Assessments do The return value is `{:ok, %{"count": count, "data": submissions}}` - # Parameters - - `pageSize`: Integer. The number of submissions to return. Default is 10. - - `offset`: Integer. The number of submissions to skip. Default is 0. - - `title`: String. Assessment title. - - `status`: String. Submission status. - - `isFullyGraded`: Boolean. Whether the submission is fully graded. - - `isGradingPublished`: Boolean. Whether the grading is published. - - `group`: Boolean. Only the groups under the grader should be returned. - - `groupName`: String. Group name. - - `name`: String. User name. - - `username`: String. User username. - - `type`: String. Assessment Config type. - - `isManuallyGraded`: Boolean. Whether the assessment is manually graded. + # Params + Refer to admin_grading_controller.ex/index for the list of query parameters. # Implementation Uses helper functions to build the filter query. Helper functions are separated by tables in the database. """ - @spec submissions_by_grader_for_index(CourseRegistration.t()) :: + @spec submissions_by_grader_for_index(CourseRegistration.t(), map()) :: {:ok, %{ :count => integer, @@ -1920,14 +1909,7 @@ defmodule Cadet.Assessments do }} def submissions_by_grader_for_index( grader = %CourseRegistration{course_id: course_id}, - params \\ %{ - "group" => "false", - "isFullyGraded" => "false", - "pageSize" => "10", - "offset" => "0", - "sortBy" => "", - "sortDirection" => "" - } + params ) do submission_answers_query = from(ans in Answer, @@ -1978,8 +1960,8 @@ defmodule Cadet.Assessments do where: s.assessment_id in subquery(build_assessment_config_filter(params)), where: ^build_submission_filter(params), where: ^build_course_registration_filter(params, grader), - limit: ^elem(Integer.parse(Map.get(params, "pageSize", "10")), 0), - offset: ^elem(Integer.parse(Map.get(params, "offset", "0")), 0), + limit: ^params[:limit], + offset: ^params[:offset], select: %{ id: s.id, status: s.status, @@ -1997,8 +1979,7 @@ defmodule Cadet.Assessments do } ) - query = - sort_submission(query, Map.get(params, "sortBy", ""), Map.get(params, "sortDirection", "")) + query = sort_submission(query, params[:sort_by], params[:sort_direction]) query = from([s, ans, asst, cr, user, group] in query, order_by: [desc: s.inserted_at, asc: s.id]) @@ -2027,117 +2008,82 @@ defmodule Cadet.Assessments do end # Given a query from submissions_by_grader_for_index, - # sorts it by the relevant field and direction - # sort_by is a string of either "", "assessmentName", "assessmentType", "studentName", - # "studentUsername", "groupName", "progressStatus", "xp" - # sort_direction is a string of either "", "sort-asc", "sort-desc" - defp sort_submission(query, sort_by, sort_direction) do - cond do - sort_direction == "sort-asc" -> - sort_submission_asc(query, sort_by) - - sort_direction == "sort-desc" -> - sort_submission_desc(query, sort_by) - - true -> - query - end - end - - defp sort_submission_asc(query, sort_by) do - cond do - sort_by == "assessmentName" -> + # sorts it by the relevant field and direction. + defp sort_submission(query, sort_by, sort_direction) + when sort_direction in [:asc, :desc] do + case sort_by do + :assessment_name -> from([s, ans, asst, cr, user, group, config] in query, - order_by: fragment("upper(?)", asst.title) + order_by: [{^sort_direction, fragment("upper(?)", asst.title)}] ) - sort_by == "assessmentType" -> - from([s, ans, asst, cr, user, group, config] in query, order_by: asst.config_id) + :assessment_type -> + from([s, ans, asst, cr, user, group, config] in query, + order_by: [{^sort_direction, asst.config_id}] + ) - sort_by == "studentName" -> + :student_name -> from([s, ans, asst, cr, user, group, config] in query, - order_by: fragment("upper(?)", user.name) + order_by: [{^sort_direction, fragment("upper(?)", user.name)}] ) - sort_by == "studentUsername" -> + :student_username -> from([s, ans, asst, cr, user, group, config] in query, - order_by: fragment("upper(?)", user.username) + order_by: [{^sort_direction, fragment("upper(?)", user.username)}] ) - sort_by == "groupName" -> + :group_name -> from([s, ans, asst, cr, user, group, config] in query, - order_by: fragment("upper(?)", group.name) + order_by: [{^sort_direction, fragment("upper(?)", group.name)}] ) - sort_by == "progressStatus" -> + :progress_status -> from([s, ans, asst, cr, user, group, config] in query, order_by: [ - asc: config.is_manually_graded, - asc: s.status, - asc: ans.graded_count - asst.question_count, - asc: s.is_grading_published + {^sort_direction, config.is_manually_graded}, + {^sort_direction, s.status}, + {^sort_direction, ans.graded_count - asst.question_count}, + {^sort_direction, s.is_grading_published} ] ) - sort_by == "xp" -> + :xp -> from([s, ans, asst, cr, user, group, config] in query, - order_by: ans.xp + ans.xp_adjustment + order_by: [{^sort_direction, ans.xp + ans.xp_adjustment}] ) - true -> + _ -> query end end - defp sort_submission_desc(query, sort_by) do - cond do - sort_by == "assessmentName" -> - from([s, ans, asst, cr, user, group, config] in query, - order_by: [desc: fragment("upper(?)", asst.title)] - ) + defp sort_submission(query, _sort_by, _sort_direction), do: query - sort_by == "assessmentType" -> - from([s, ans, asst, cr, user, group, config] in query, order_by: [desc: asst.config_id]) - - sort_by == "studentName" -> - from([s, ans, asst, cr, user, group, config] in query, - order_by: [desc: fragment("upper(?)", user.name)] - ) - - sort_by == "studentUsername" -> - from([s, ans, asst, cr, user, group, config] in query, - order_by: [desc: fragment("upper(?)", user.username)] - ) - - sort_by == "groupName" -> - from([s, ans, asst, cr, user, group, config] in query, - order_by: [desc: fragment("upper(?)", group.name)] - ) - - sort_by == "progressStatus" -> - from([s, ans, asst, cr, user, group, config] in query, - order_by: [ - desc: config.is_manually_graded, - desc: s.status, - desc: ans.graded_count - asst.question_count, - desc: s.is_grading_published - ] - ) - - sort_by == "xp" -> - from([s, ans, asst, cr, user, group, config] in query, - order_by: [desc: ans.xp + ans.xp_adjustment] - ) + def parse_sort_direction(params) do + case params[:sort_direction] do + "sort-asc" -> Map.put(params, :sort_direction, :asc) + "sort-desc" -> Map.put(params, :sort_direction, :desc) + _ -> Map.put(params, :sort_direction, nil) + end + end - true -> - query + def parse_sort_by(params) do + case params[:sort_by] do + "assessmentName" -> Map.put(params, :sort_by, :assessment_name) + "assessmentType" -> Map.put(params, :sort_by, :assessment_type) + "studentName" -> Map.put(params, :sort_by, :student_name) + "studentUsername" -> Map.put(params, :sort_by, :student_username) + "groupName" -> Map.put(params, :sort_by, :group_name) + "progressStatus" -> Map.put(params, :sort_by, :progress_status) + "xp" -> Map.put(params, :sort_by, :xp) + _ -> Map.put(params, :sort_by, nil) end end defp build_assessment_filter(params, course_id) do assessments_filters = Enum.reduce(params, dynamic(true), fn - {"title", value}, dynamic -> + {:title, value}, dynamic -> dynamic([assessment], ^dynamic and ilike(assessment.title, ^"%#{value}%")) {_, _}, dynamic -> @@ -2153,16 +2099,16 @@ defmodule Cadet.Assessments do defp build_submission_filter(params) do Enum.reduce(params, dynamic(true), fn - {"status", value}, dynamic -> + {:status, value}, dynamic -> dynamic([submission], ^dynamic and submission.status == ^value) - {"isFullyGraded", value}, dynamic -> + {:is_fully_graded, value}, dynamic -> dynamic( [ans: ans, asst: asst], ^dynamic and asst.question_count == ans.graded_count == ^value ) - {"isGradingPublished", value}, dynamic -> + {:is_grading_published, value}, dynamic -> dynamic([submission], ^dynamic and submission.is_grading_published == ^value) {_, _}, dynamic -> @@ -2172,7 +2118,7 @@ defmodule Cadet.Assessments do defp build_course_registration_filter(params, grader) do Enum.reduce(params, dynamic(true), fn - {"group", "true"}, dynamic -> + {:group, true}, dynamic -> dynamic( [submission], (^dynamic and @@ -2186,7 +2132,7 @@ defmodule Cadet.Assessments do )) or submission.student_id == ^grader.id ) - {"groupName", value}, dynamic -> + {:group_name, value}, dynamic -> dynamic( [submission], ^dynamic and @@ -2207,7 +2153,7 @@ defmodule Cadet.Assessments do defp build_user_filter(params) do Enum.reduce(params, dynamic(true), fn - {"name", value}, dynamic -> + {:name, value}, dynamic -> dynamic( [submission], ^dynamic and @@ -2221,7 +2167,7 @@ defmodule Cadet.Assessments do ) ) - {"username", value}, dynamic -> + {:username, value}, dynamic -> dynamic( [submission], ^dynamic and @@ -2243,10 +2189,10 @@ defmodule Cadet.Assessments do defp build_assessment_config_filter(params) do assessment_config_filters = Enum.reduce(params, dynamic(true), fn - {"type", value}, dynamic -> + {:type, value}, dynamic -> dynamic([assessment_config: config], ^dynamic and config.type == ^value) - {"isManuallyGraded", value}, dynamic -> + {:is_manually_graded, value}, dynamic -> dynamic([assessment_config: config], ^dynamic and config.is_manually_graded == ^value) {_, _}, dynamic -> diff --git a/lib/cadet/helpers/shared_helper.ex b/lib/cadet/helpers/shared_helper.ex index 0c20d7fcf..6528a2daa 100644 --- a/lib/cadet/helpers/shared_helper.ex +++ b/lib/cadet/helpers/shared_helper.ex @@ -96,4 +96,26 @@ defmodule Cadet.SharedHelper do Sentry.capture_exception(error, stacktrace: stacktrace) end + + @doc """ + Converts a map with string booleans to booleans. + """ + @spec process_map_booleans(map(), list(atom())) :: map() + def process_map_booleans(map, flags) do + flags + |> Enum.reduce(map, fn flag, acc -> + put_in(acc[flag], acc[flag] == "true") + end) + end + + @doc """ + Converts a map with string integers to integers. + """ + @spec process_map_integers(map(), list(atom())) :: map() + def process_map_integers(map, flags) do + flags + |> Enum.reduce(map, fn flag, acc -> + put_in(acc[flag], String.to_integer(acc[flag])) + end) + end end diff --git a/lib/cadet/jobs/xml_parser.ex b/lib/cadet/jobs/xml_parser.ex index 09640b565..b49128506 100644 --- a/lib/cadet/jobs/xml_parser.ex +++ b/lib/cadet/jobs/xml_parser.ex @@ -8,7 +8,7 @@ defmodule Cadet.Updater.XMLParser do import Ecto.Query import SweetXml - alias Cadet.{Repo, Courses.AssessmentConfig, Assessments} + alias Cadet.{Repo, Courses.AssessmentConfig, Assessments, SharedHelper} require Logger @@ -149,7 +149,8 @@ defmodule Cadet.Updater.XMLParser do |> Enum.map(fn param -> with {:no_missing_attr?, true} <- {:no_missing_attr?, not is_nil(param[:type]) and not is_nil(param[:max_xp])}, - question when is_map(question) <- process_question_booleans(param), + question when is_map(question) <- + SharedHelper.process_map_booleans(param, [:show_solution, :blocking]), question when is_map(question) <- process_question_by_question_type(param), question when is_map(question) <- process_question_library(question, default_library, default_grading_library), @@ -179,16 +180,6 @@ defmodule Cadet.Updater.XMLParser do Logger.error("Changeset: #{inspect(changeset, pretty: true)}") end - @spec process_question_booleans(map()) :: map() - defp process_question_booleans(question) do - flags = [:show_solution, :blocking] - - flags - |> Enum.reduce(question, fn flag, acc -> - put_in(acc[flag], acc[flag] == "true") - end) - end - @spec process_question_by_question_type(map()) :: map() | {:error, String.t()} defp process_question_by_question_type(question) do question[:entity] diff --git a/lib/cadet_web/admin_controllers/admin_grading_controller.ex b/lib/cadet_web/admin_controllers/admin_grading_controller.ex index d95431362..5f349edb0 100644 --- a/lib/cadet_web/admin_controllers/admin_grading_controller.ex +++ b/lib/cadet_web/admin_controllers/admin_grading_controller.ex @@ -4,10 +4,47 @@ defmodule CadetWeb.AdminGradingController do alias Cadet.Assessments + @doc """ + # Query Parameters + - `pageSize`: Integer. The number of submissions to return. Default 10. + - `offset`: Integer. The number of submissions to skip. Default 0. + - `title`: String. Assessment title. + - `status`: String. Submission status. + - `isFullyGraded`: Boolean. Whether the submission is fully graded. + - `isGradingPublished`: Boolean. Whether the grading is published. + - `group`: Boolean. Only the groups under the grader should be returned. + - `groupName`: String. Group name. + - `name`: String. User name. + - `username`: String. User username. + - `type`: String. Assessment Config type. + - `isManuallyGraded`: Boolean. Whether the assessment is manually graded. + """ def index(conn, %{"group" => group} = params) when group in ["true", "false"] do course_reg = conn.assigns[:course_reg] + boolean_params = [:is_fully_graded, :group, :is_manually_graded] + int_params = [:page_size, :offset] + + # Convert string keys to atoms and parse values + params = + params + |> to_snake_case_atom_keys() + |> Map.put_new(:page_size, "10") + |> Map.put_new(:offset, "0") + + filtered_boolean_params = + params + |> Map.take(boolean_params) + |> Map.keys() + + params = + params + |> process_map_booleans(filtered_boolean_params) + |> process_map_integers(int_params) + |> Assessments.parse_sort_direction() + |> Assessments.parse_sort_by() + case Assessments.submissions_by_grader_for_index(course_reg, params) do {:ok, view_model} -> conn diff --git a/test/cadet/assessments/assessments_test.exs b/test/cadet/assessments/assessments_test.exs index 750861657..6c36cd1d1 100644 --- a/test/cadet/assessments/assessments_test.exs +++ b/test/cadet/assessments/assessments_test.exs @@ -2220,8 +2220,8 @@ defmodule Cadet.AssessmentsTest do {_, res} = Assessments.submissions_by_grader_for_index(avenger, %{ - "title" => title, - "pageSize" => total_submissions + :title => title, + :page_size => total_submissions }) assessments_from_res = res[:data][:assessments] @@ -2243,8 +2243,8 @@ defmodule Cadet.AssessmentsTest do {_, res} = Assessments.submissions_by_grader_for_index(avenger, %{ - "status" => "attempting", - "pageSize" => total_submissions + :status => "attempting", + :page_size => total_submissions }) submissions_from_res = res[:data][:submissions] @@ -2268,8 +2268,8 @@ defmodule Cadet.AssessmentsTest do {_, res} = Assessments.submissions_by_grader_for_index(avenger, %{ - "status" => "attempted", - "pageSize" => total_submissions + :status => "attempted", + :page_size => total_submissions }) submissions_from_res = res[:data][:submissions] @@ -2293,8 +2293,8 @@ defmodule Cadet.AssessmentsTest do {_, res} = Assessments.submissions_by_grader_for_index(avenger, %{ - "status" => "submitted", - "pageSize" => total_submissions + :status => "submitted", + :page_size => total_submissions }) submissions_from_res = res[:data][:submissions] @@ -2318,8 +2318,8 @@ defmodule Cadet.AssessmentsTest do {_, res} = Assessments.submissions_by_grader_for_index(avenger, %{ - "isFullyGraded" => "true", - "pageSize" => total_submissions + :is_fully_graded => true, + :page_size => total_submissions }) submissions_from_res = res[:data][:submissions] @@ -2343,8 +2343,8 @@ defmodule Cadet.AssessmentsTest do {_, res} = Assessments.submissions_by_grader_for_index(avenger, %{ - "isFullyGraded" => "false", - "pageSize" => total_submissions + :is_fully_graded => false, + :page_size => total_submissions }) submissions_from_res = res[:data][:submissions] @@ -2370,8 +2370,8 @@ defmodule Cadet.AssessmentsTest do {_, res} = Assessments.submissions_by_grader_for_index(avenger, %{ - "isGradingPublished" => "true", - "pageSize" => total_submissions + :is_grading_published => true, + :page_size => total_submissions }) submissions_from_res = res[:data][:submissions] @@ -2397,8 +2397,8 @@ defmodule Cadet.AssessmentsTest do {_, res} = Assessments.submissions_by_grader_for_index(avenger, %{ - "isGradingPublished" => "false", - "pageSize" => total_submissions + :is_grading_published => false, + :page_size => total_submissions }) submissions_from_res = res[:data][:submissions] @@ -2424,8 +2424,8 @@ defmodule Cadet.AssessmentsTest do {_, res} = Assessments.submissions_by_grader_for_index(avenger, %{ - "group" => "true", - "pageSize" => total_submissions + :group => true, + :page_size => total_submissions }) submissions_from_res = res[:data][:submissions] @@ -2452,8 +2452,8 @@ defmodule Cadet.AssessmentsTest do {_, res} = Assessments.submissions_by_grader_for_index(avenger2, %{ - "group" => "true", - "pageSize" => total_submissions + :group => true, + :page_size => total_submissions }) submissions_from_res = res[:data][:submissions] @@ -2483,8 +2483,8 @@ defmodule Cadet.AssessmentsTest do {_, res} = Assessments.submissions_by_grader_for_index(avenger2, %{ - "groupName" => group_name, - "pageSize" => total_submissions + :group_name => group_name, + :page_size => total_submissions }) submissions_from_res = res[:data][:submissions] @@ -2514,8 +2514,8 @@ defmodule Cadet.AssessmentsTest do {_, res} = Assessments.submissions_by_grader_for_index(avenger, %{ - "groupName" => group_name, - "pageSize" => total_submissions + :group_name => group_name, + :page_size => total_submissions }) submissions_from_res = res[:data][:submissions] @@ -2539,8 +2539,8 @@ defmodule Cadet.AssessmentsTest do {_, res} = Assessments.submissions_by_grader_for_index(avenger, %{ - "name" => student_name, - "pageSize" => total_submissions + :name => student_name, + :page_size => total_submissions }) submissions_from_res = res[:data][:submissions] @@ -2563,8 +2563,8 @@ defmodule Cadet.AssessmentsTest do {_, res} = Assessments.submissions_by_grader_for_index(avenger, %{ - "name" => student_name, - "pageSize" => total_submissions + :name => student_name, + :page_size => total_submissions }) submissions_from_res = res[:data][:submissions] @@ -2587,8 +2587,8 @@ defmodule Cadet.AssessmentsTest do {_, res} = Assessments.submissions_by_grader_for_index(avenger, %{ - "name" => student_name, - "pageSize" => total_submissions + :name => student_name, + :page_size => total_submissions }) submissions_from_res = res[:data][:submissions] @@ -2611,8 +2611,8 @@ defmodule Cadet.AssessmentsTest do {_, res} = Assessments.submissions_by_grader_for_index(avenger, %{ - "username" => student_username, - "pageSize" => total_submissions + :username => student_username, + :page_size => total_submissions }) submissions_from_res = res[:data][:submissions] @@ -2635,8 +2635,8 @@ defmodule Cadet.AssessmentsTest do {_, res} = Assessments.submissions_by_grader_for_index(avenger, %{ - "username" => student_username, - "pageSize" => total_submissions + :username => student_username, + :page_size => total_submissions }) submissions_from_res = res[:data][:submissions] @@ -2659,8 +2659,8 @@ defmodule Cadet.AssessmentsTest do {_, res} = Assessments.submissions_by_grader_for_index(avenger, %{ - "username" => student_username, - "pageSize" => total_submissions + :username => student_username, + :page_size => total_submissions }) submissions_from_res = res[:data][:submissions] @@ -2683,8 +2683,8 @@ defmodule Cadet.AssessmentsTest do {_, res} = Assessments.submissions_by_grader_for_index(avenger, %{ - "type" => assessment_type, - "pageSize" => total_submissions + :type => assessment_type, + :page_size => total_submissions }) assessments_from_res = res[:data][:assessments] @@ -2712,8 +2712,8 @@ defmodule Cadet.AssessmentsTest do {_, res} = Assessments.submissions_by_grader_for_index(avenger, %{ - "type" => assessment_type, - "pageSize" => total_submissions + :type => assessment_type, + :page_size => total_submissions }) assessments_from_res = res[:data][:assessments] @@ -2741,8 +2741,8 @@ defmodule Cadet.AssessmentsTest do {_, res} = Assessments.submissions_by_grader_for_index(avenger, %{ - "type" => assessment_type, - "pageSize" => total_submissions + :type => assessment_type, + :page_size => total_submissions }) assessments_from_res = res[:data][:assessments] @@ -2770,8 +2770,8 @@ defmodule Cadet.AssessmentsTest do {_, res} = Assessments.submissions_by_grader_for_index(avenger, %{ - "isManuallyGraded" => "true", - "pageSize" => total_submissions + :is_manually_graded => true, + :page_size => total_submissions }) submissions_from_res = res[:data][:submissions] @@ -2799,8 +2799,8 @@ defmodule Cadet.AssessmentsTest do {_, res} = Assessments.submissions_by_grader_for_index(avenger, %{ - "isManuallyGraded" => "false", - "pageSize" => total_submissions + :is_manually_graded => false, + :page_size => total_submissions }) submissions_from_res = res[:data][:submissions] @@ -2823,9 +2823,9 @@ defmodule Cadet.AssessmentsTest do } do {_, res} = Assessments.submissions_by_grader_for_index(avenger, %{ - "pageSize" => total_submissions, - "sortBy" => "assessmentName", - "sortDirection" => "sort-asc" + :page_size => total_submissions, + :sort_by => :assessment_name, + :sort_direction => :asc }) submissions_from_res = res[:data][:submissions] @@ -2857,9 +2857,9 @@ defmodule Cadet.AssessmentsTest do } do {_, res} = Assessments.submissions_by_grader_for_index(avenger, %{ - "pageSize" => total_submissions, - "sortBy" => "assessmentName", - "sortDirection" => "sort-desc" + :page_size => total_submissions, + :sort_by => :assessment_name, + :sort_direction => :desc }) submissions_from_res = res[:data][:submissions] @@ -2891,9 +2891,9 @@ defmodule Cadet.AssessmentsTest do } do {_, res} = Assessments.submissions_by_grader_for_index(avenger, %{ - "pageSize" => total_submissions, - "sortBy" => "assessmentType", - "sortDirection" => "sort-asc" + :page_size => total_submissions, + :sort_by => :assessment_type, + :sort_direction => :asc }) submissions_from_res = res[:data][:submissions] @@ -2925,9 +2925,9 @@ defmodule Cadet.AssessmentsTest do } do {_, res} = Assessments.submissions_by_grader_for_index(avenger, %{ - "pageSize" => total_submissions, - "sortBy" => "assessmentType", - "sortDirection" => "sort-desc" + :page_size => total_submissions, + :sort_by => :assessment_type, + :sort_direction => :desc }) submissions_from_res = res[:data][:submissions] @@ -2959,9 +2959,9 @@ defmodule Cadet.AssessmentsTest do } do {_, res} = Assessments.submissions_by_grader_for_index(avenger, %{ - "pageSize" => total_submissions, - "sortBy" => "xp", - "sortDirection" => "sort-asc" + :page_size => total_submissions, + :sort_by => :xp, + :sort_direction => :asc }) submissions_from_res = res[:data][:submissions] @@ -2982,9 +2982,9 @@ defmodule Cadet.AssessmentsTest do } do {_, res} = Assessments.submissions_by_grader_for_index(avenger, %{ - "pageSize" => total_submissions, - "sortBy" => "xp", - "sortDirection" => "sort-desc" + :page_size => total_submissions, + :sort_by => :xp, + :sort_direction => :desc }) submissions_from_res = res[:data][:submissions] diff --git a/test/cadet/helpers/shared_helper_test.exs b/test/cadet/helpers/shared_helper_test.exs index 43ef3451f..1d77de7a0 100644 --- a/test/cadet/helpers/shared_helper_test.exs +++ b/test/cadet/helpers/shared_helper_test.exs @@ -42,4 +42,24 @@ defmodule Cadet.SharedHelperTest do } end end + + test "process_map_booleans works correctly" do + map = %{:hello_world => "true", :bye_world => "false"} + flags = [:hello_world, :bye_world] + + assert process_map_booleans(map, flags) == %{ + :hello_world => true, + :bye_world => false + } + end + + test "process_map_integers works correctly" do + map = %{:hello_world => "1", :bye_world => "2"} + flags = [:hello_world, :bye_world] + + assert process_map_integers(map, flags) == %{ + :hello_world => 1, + :bye_world => 2 + } + end end From 6d33c090688e4d68eaeb85320c1a11b0c5ff4678 Mon Sep 17 00:00:00 2001 From: Gabriel Chang <77312579+GabrielCWT@users.noreply.github.com> Date: Fri, 20 Sep 2024 12:28:37 +0800 Subject: [PATCH 5/9] fix: Fix autopublish grading by auto grader (#1188) * fix: Fix autopublish grading by auto grader * feat: Implement tests for autopublishing --- .../jobs/autograder/result_store_worker.ex | 4 +- .../autograder/result_store_worker_test.exs | 50 ++++++++++++++++++- 2 files changed, 52 insertions(+), 2 deletions(-) diff --git a/lib/cadet/jobs/autograder/result_store_worker.ex b/lib/cadet/jobs/autograder/result_store_worker.ex index 852253488..d0ce71c65 100644 --- a/lib/cadet/jobs/autograder/result_store_worker.ex +++ b/lib/cadet/jobs/autograder/result_store_worker.ex @@ -93,8 +93,10 @@ defmodule Cadet.Autograder.ResultStoreWorker do assessment = Repo.get(Assessment, submission.assessment_id) assessment_config = Repo.get_by(AssessmentConfig, id: assessment.config_id) is_grading_auto_published = assessment_config.is_grading_auto_published + is_manually_graded = assessment_config.is_manually_graded - if Assessments.is_fully_autograded?(submission_id) and is_grading_auto_published do + if Assessments.is_fully_autograded?(submission_id) and is_grading_auto_published and + not is_manually_graded do Assessments.publish_grading(submission_id) end diff --git a/test/cadet/jobs/autograder/result_store_worker_test.exs b/test/cadet/jobs/autograder/result_store_worker_test.exs index 57961ebef..952e23a2c 100644 --- a/test/cadet/jobs/autograder/result_store_worker_test.exs +++ b/test/cadet/jobs/autograder/result_store_worker_test.exs @@ -72,7 +72,55 @@ defmodule Cadet.Autograder.ResultStoreWorkerTest do end describe "#perform, valid answer_id" do - test "before manual grading and grading auto published", %{answer: answer, results: results} do + test "before manual grading, grading auto published and manual grading required", %{ + answer: answer, + results: results + } do + for result <- results do + ResultStoreWorker.perform(%{answer_id: answer.id, result: result}) + + answer = + Answer + |> join(:inner, [a], q in assoc(a, :question)) + |> preload([_, q], question: q) + |> Repo.get(answer.id) + + errors_string_keys = + Enum.map(result.result, fn err -> + Enum.reduce(err, %{}, fn {k, v}, acc -> + Map.put(acc, "#{k}", v) + end) + end) + + if result.max_score == 0 do + assert answer.xp == 0 + else + assert answer.xp == + Integer.floor_div( + answer.question.max_xp * result.score, + result.max_score + ) + end + + submission = Repo.get(Submission, answer.submission_id) + + assert submission.is_grading_published == false + assert answer.autograding_status == result.status + assert answer.autograding_results == errors_string_keys + end + end + + test "before manual grading, grading auto published and manual grading not required", %{ + results: results + } do + assessment_config = + insert(:assessment_config, %{is_grading_auto_published: true, is_manually_graded: false}) + + assessment = insert(:assessment, %{config: assessment_config}) + question = insert(:question, %{assessment: assessment}) + submission = insert(:submission, %{status: :submitted, assessment: assessment}) + answer = insert(:answer, %{question: question, submission: submission}) + for result <- results do ResultStoreWorker.perform(%{answer_id: answer.id, result: result}) From b02b43cde69b6d8c3139e63443afdad790d5d618 Mon Sep 17 00:00:00 2001 From: Richard Dominick <34370238+RichDom2185@users.noreply.github.com> Date: Sat, 21 Sep 2024 00:18:14 +0800 Subject: [PATCH 6/9] Remove unnecessary trips to the DB (#1189) * Use subquery to get submission IDs * Add TODO * Fix n+1 query problem * Fix typo * Fix tests * Comment Sentry DSN in example secrets * Fix admin assessments controller * fix: Fix n + 1 query in assessments_view * Fix format * Fix format --- config/dev.secrets.exs.example | 4 +- lib/cadet/assessments/assessments.ex | 51 ++++++++++++++----- .../admin_assessments_controller.ex | 2 +- .../admin_views/admin_assessments_view.ex | 18 +------ lib/cadet_web/views/assessments_view.ex | 18 +------ .../admin_assessments_controller_test.exs | 6 +-- .../assessments_controller_test.exs | 6 +-- 7 files changed, 49 insertions(+), 56 deletions(-) diff --git a/config/dev.secrets.exs.example b/config/dev.secrets.exs.example index 088f27727..42a87b674 100644 --- a/config/dev.secrets.exs.example +++ b/config/dev.secrets.exs.example @@ -104,8 +104,8 @@ config :cadet, # optional, passed to [HTTPoison.Request](https://hexdocs.pm/httpoison/HTTPoison.Request.html) options http_options: [recv_timeout: 170_0000] -config :sentry, - dsn: "https://public_key/sentry.io/somethingsomething" +# config :sentry, +# dsn: "https://public_key/sentry.io/somethingsomething" # # Additional configuration for SAML authentication # # For more details, see https://github.com/handnot2/samly diff --git a/lib/cadet/assessments/assessments.ex b/lib/cadet/assessments/assessments.ex index 55d0dff4d..8e5956f8c 100644 --- a/lib/cadet/assessments/assessments.ex +++ b/lib/cadet/assessments/assessments.ex @@ -113,7 +113,7 @@ defmodule Cadet.Assessments do Submission |> where( [s], - s.id in ^submission_ids + s.id in subquery(submission_ids) ) |> where(is_grading_published: true) |> join(:inner, [s], a in Answer, on: s.id == a.submission_id) @@ -337,7 +337,7 @@ defmodule Cadet.Assessments do |> join(:left, [s], ans in Answer, on: ans.submission_id == s.id) |> where( [s], - s.id in ^submission_ids + s.id in subquery(submission_ids) ) |> group_by([s], s.assessment_id) |> select([s, ans], %{ @@ -351,7 +351,7 @@ defmodule Cadet.Assessments do Submission |> where( [s], - s.id in ^submission_ids + s.id in subquery(submission_ids) ) |> select([s], [:assessment_id, :status, :is_grading_published]) @@ -382,13 +382,31 @@ defmodule Cadet.Assessments do end defp get_submission_ids(cr_id, teams) do - query = - from(s in Submission, - where: s.student_id == ^cr_id or s.team_id in ^Enum.map(teams, & &1.id), - select: s.id - ) + from(s in Submission, + where: s.student_id == ^cr_id or s.team_id in ^Enum.map(teams, & &1.id), + select: s.id + ) + end - Repo.all(query) + defp is_voting_assigned(assessment_ids) do + voting_assigned_question_ids = + SubmissionVotes + |> select([v], v.question_id) + |> Repo.all() + + # Map of assessment_id to boolean + voting_assigned_assessment_ids = + Question + |> where(type: :voting) + |> where([q], q.id in ^voting_assigned_question_ids) + |> where([q], q.assessment_id in ^assessment_ids) + |> select([q], q.assessment_id) + |> distinct(true) + |> Repo.all() + + Enum.reduce(assessment_ids, %{}, fn id, acc -> + Map.put(acc, id, Enum.member?(voting_assigned_assessment_ids, id)) + end) end @doc """ @@ -396,7 +414,14 @@ defmodule Cadet.Assessments do if it's grading is not published. """ def format_all_assessments(assessments) do + is_voting_assigned_map = + assessments + |> Enum.map(& &1.id) + |> is_voting_assigned() + Enum.map(assessments, fn a -> + a = Map.put(a, :is_voting_published, Map.get(is_voting_assigned_map, a.id, false)) + if a.is_grading_published do a else @@ -653,17 +678,16 @@ defmodule Cadet.Assessments do end end - def is_voting_published(assessment_id) do + defp is_voting_published(assessment_id) do voting_assigned_question_ids = SubmissionVotes |> select([v], v.question_id) - |> Repo.all() Question |> where(type: :voting) |> where(assessment_id: ^assessment_id) - |> where([q], q.id in ^voting_assigned_question_ids) - |> Repo.exists?() + |> where([q], q.id in subquery(voting_assigned_question_ids)) + |> Repo.exists?() || false end def update_final_contest_entries do @@ -1442,6 +1466,7 @@ defmodule Cadet.Assessments do @spec update_xp_bonus(Submission.t()) :: {:ok, Submission.t()} | {:error, Ecto.Changeset.t()} + # TODO: Should destructure and pattern match on the function defp update_xp_bonus(submission = %Submission{id: submission_id}) do # to ensure backwards compatibility if submission.xp_bonus == 0 do diff --git a/lib/cadet_web/admin_controllers/admin_assessments_controller.ex b/lib/cadet_web/admin_controllers/admin_assessments_controller.ex index d9a992267..9263195f2 100644 --- a/lib/cadet_web/admin_controllers/admin_assessments_controller.ex +++ b/lib/cadet_web/admin_controllers/admin_assessments_controller.ex @@ -14,7 +14,7 @@ defmodule CadetWeb.AdminAssessmentsController do def index(conn, %{"course_reg_id" => course_reg_id}) do course_reg = Repo.get(CourseRegistration, course_reg_id) {:ok, assessments} = Assessments.all_assessments(course_reg) - + assessments = Assessments.format_all_assessments(assessments) render(conn, "index.json", assessments: assessments) end diff --git a/lib/cadet_web/admin_views/admin_assessments_view.ex b/lib/cadet_web/admin_views/admin_assessments_view.ex index 159c5b848..33af48629 100644 --- a/lib/cadet_web/admin_views/admin_assessments_view.ex +++ b/lib/cadet_web/admin_views/admin_assessments_view.ex @@ -2,9 +2,6 @@ defmodule CadetWeb.AdminAssessmentsView do use CadetWeb, :view use Timex import CadetWeb.AssessmentsHelpers - import Ecto.Query - alias Cadet.Assessments.{Question, SubmissionVotes} - alias Cadet.Repo def render("index.json", %{assessments: assessments}) do render_many(assessments, CadetWeb.AdminAssessmentsView, "overview.json", as: :assessment) @@ -35,7 +32,7 @@ defmodule CadetWeb.AdminAssessmentsView do maxTeamSize: :max_team_size, hasVotingFeatures: :has_voting_features, hasTokenCounter: :has_token_counter, - isVotingPublished: &is_voting_assigned(&1.id) + isVotingPublished: :is_voting_published }) end @@ -84,17 +81,4 @@ defmodule CadetWeb.AdminAssessmentsView do defp password_protected?(nil), do: false defp password_protected?(_), do: true - - defp is_voting_assigned(assessment_id) do - voting_assigned_question_ids = - SubmissionVotes - |> select([v], v.question_id) - |> Repo.all() - - Question - |> where(type: :voting) - |> where(assessment_id: ^assessment_id) - |> where([q], q.id in ^voting_assigned_question_ids) - |> Repo.exists?() - end end diff --git a/lib/cadet_web/views/assessments_view.ex b/lib/cadet_web/views/assessments_view.ex index 700f13019..a00c61aa3 100644 --- a/lib/cadet_web/views/assessments_view.ex +++ b/lib/cadet_web/views/assessments_view.ex @@ -1,9 +1,6 @@ defmodule CadetWeb.AssessmentsView do use CadetWeb, :view use Timex - import Ecto.Query - alias Cadet.Assessments.{Question, SubmissionVotes} - alias Cadet.Repo import CadetWeb.AssessmentsHelpers @@ -37,7 +34,7 @@ defmodule CadetWeb.AssessmentsView do maxTeamSize: :max_team_size, hasVotingFeatures: :has_voting_features, hasTokenCounter: :has_token_counter, - isVotingPublished: &is_voting_assigned(&1.id), + isVotingPublished: :is_voting_published, hoursBeforeEarlyXpDecay: & &1.config.hours_before_early_xp_decay }) end @@ -87,17 +84,4 @@ defmodule CadetWeb.AssessmentsView do defp password_protected?(nil), do: false defp password_protected?(_), do: true - - defp is_voting_assigned(assessment_id) do - voting_assigned_question_ids = - SubmissionVotes - |> select([v], v.question_id) - |> Repo.all() - - Question - |> where(type: :voting) - |> where(assessment_id: ^assessment_id) - |> where([q], q.id in ^voting_assigned_question_ids) - |> Repo.exists?() - end end diff --git a/test/cadet_web/admin_controllers/admin_assessments_controller_test.exs b/test/cadet_web/admin_controllers/admin_assessments_controller_test.exs index 0b0dc1483..10e9c3331 100644 --- a/test/cadet_web/admin_controllers/admin_assessments_controller_test.exs +++ b/test/cadet_web/admin_controllers/admin_assessments_controller_test.exs @@ -90,11 +90,11 @@ defmodule CadetWeb.AdminAssessmentsControllerTest do "isPublished" => &1.is_published, "gradedCount" => 0, "questionCount" => 9, - "xp" => (800 + 500 + 100) * 3, + "xp" => if(&1.is_grading_published, do: (800 + 500 + 100) * 3, else: 0), "earlySubmissionXp" => &1.config.early_submission_xp, "hasVotingFeatures" => &1.has_voting_features, "hasTokenCounter" => &1.has_token_counter, - "isVotingPublished" => Assessments.is_voting_published(&1.id) + "isVotingPublished" => false } ) @@ -145,7 +145,7 @@ defmodule CadetWeb.AdminAssessmentsControllerTest do "earlySubmissionXp" => &1.config.early_submission_xp, "hasVotingFeatures" => &1.has_voting_features, "hasTokenCounter" => &1.has_token_counter, - "isVotingPublished" => Assessments.is_voting_published(&1.id) + "isVotingPublished" => false } ) diff --git a/test/cadet_web/controllers/assessments_controller_test.exs b/test/cadet_web/controllers/assessments_controller_test.exs index f1cc9beb0..d17eee839 100644 --- a/test/cadet_web/controllers/assessments_controller_test.exs +++ b/test/cadet_web/controllers/assessments_controller_test.exs @@ -83,7 +83,7 @@ defmodule CadetWeb.AssessmentsControllerTest do "earlySubmissionXp" => &1.config.early_submission_xp, "hasVotingFeatures" => &1.has_voting_features, "hasTokenCounter" => &1.has_token_counter, - "isVotingPublished" => Assessments.is_voting_published(&1.id), + "isVotingPublished" => false, "hoursBeforeEarlyXpDecay" => &1.config.hours_before_early_xp_decay } ) @@ -174,7 +174,7 @@ defmodule CadetWeb.AssessmentsControllerTest do "earlySubmissionXp" => &1.config.early_submission_xp, "hasVotingFeatures" => &1.has_voting_features, "hasTokenCounter" => &1.has_token_counter, - "isVotingPublished" => Assessments.is_voting_published(&1.id), + "isVotingPublished" => false, "hoursBeforeEarlyXpDecay" => &1.config.hours_before_early_xp_decay } ) @@ -288,7 +288,7 @@ defmodule CadetWeb.AssessmentsControllerTest do "questionCount" => 9, "hasVotingFeatures" => &1.has_voting_features, "hasTokenCounter" => &1.has_token_counter, - "isVotingPublished" => Assessments.is_voting_published(&1.id), + "isVotingPublished" => false, "earlySubmissionXp" => &1.config.early_submission_xp, "isGradingPublished" => nil, "hoursBeforeEarlyXpDecay" => &1.config.hours_before_early_xp_decay, From e33b6c0496f98c3f3ea253125d9661fcb56496a1 Mon Sep 17 00:00:00 2001 From: Gabriel Chang <77312579+GabrielCWT@users.noreply.github.com> Date: Mon, 23 Sep 2024 11:49:09 +0800 Subject: [PATCH 7/9] Fix: Fix limit function for grading table fetch function (#1190) * fix: Fix limit functionality not working * feat: Implement test for pagination --- lib/cadet/assessments/assessments.ex | 2 +- test/cadet/assessments/assessments_test.exs | 23 +++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/lib/cadet/assessments/assessments.ex b/lib/cadet/assessments/assessments.ex index 8e5956f8c..875a0095b 100644 --- a/lib/cadet/assessments/assessments.ex +++ b/lib/cadet/assessments/assessments.ex @@ -1985,7 +1985,7 @@ defmodule Cadet.Assessments do where: s.assessment_id in subquery(build_assessment_config_filter(params)), where: ^build_submission_filter(params), where: ^build_course_registration_filter(params, grader), - limit: ^params[:limit], + limit: ^params[:page_size], offset: ^params[:offset], select: %{ id: s.id, diff --git a/test/cadet/assessments/assessments_test.exs b/test/cadet/assessments/assessments_test.exs index 6c36cd1d1..6953144c3 100644 --- a/test/cadet/assessments/assessments_test.exs +++ b/test/cadet/assessments/assessments_test.exs @@ -2210,6 +2210,29 @@ defmodule Cadet.AssessmentsTest do Map.put(seed, :total_submissions, total_submissions) end + test "limit submissions", %{ + course_regs: %{avenger1_cr: avenger} + } do + {_, res} = + Assessments.submissions_by_grader_for_index(avenger, %{ + :page_size => 1 + }) + + assert length(res[:data][:submissions]) == 1 + end + + test "limit submisssions 2", %{ + course_regs: %{avenger1_cr: avenger}, + assessments: assessments + } do + {_, res} = + Assessments.submissions_by_grader_for_index(avenger, %{ + :page_size => 2 + }) + + assert length(res[:data][:submissions]) == 2 + end + test "filter by assessment title", %{ course_regs: %{avenger1_cr: avenger}, assessments: assessments, From ae238a70cd7c3f3fef59885fecc7eb1147fdcccb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Sep 2024 15:20:40 +0800 Subject: [PATCH 8/9] build(deps-dev): Bump exvcr from 0.15.1 to 0.15.2 (#1191) Bumps [exvcr](https://github.com/parroty/exvcr) from 0.15.1 to 0.15.2. - [Release notes](https://github.com/parroty/exvcr/releases) - [Changelog](https://github.com/parroty/exvcr/blob/master/CHANGELOG.md) - [Commits](https://github.com/parroty/exvcr/compare/v0.15.1...v0.15.2) --- updated-dependencies: - dependency-name: exvcr dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- mix.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mix.lock b/mix.lock index 0476fd05d..2248e8483 100644 --- a/mix.lock +++ b/mix.lock @@ -44,7 +44,7 @@ "excoveralls": {:hex, :excoveralls, "0.18.3", "bca47a24d69a3179951f51f1db6d3ed63bca9017f476fe520eb78602d45f7756", [:mix], [{:castore, "~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "746f404fcd09d5029f1b211739afb8fb8575d775b21f6a3908e7ce3e640724c6"}, "exjsx": {:hex, :exjsx, "4.0.0", "60548841e0212df401e38e63c0078ec57b33e7ea49b032c796ccad8cde794b5c", [:mix], [{:jsx, "~> 2.8.0", [hex: :jsx, repo: "hexpm", optional: false]}], "hexpm", "32e95820a97cffea67830e91514a2ad53b888850442d6d395f53a1ac60c82e07"}, "expo": {:hex, :expo, "0.4.1", "1c61d18a5df197dfda38861673d392e642649a9cef7694d2f97a587b2cfb319b", [:mix], [], "hexpm", "2ff7ba7a798c8c543c12550fa0e2cbc81b95d4974c65855d8d15ba7b37a1ce47"}, - "exvcr": {:hex, :exvcr, "0.15.1", "772db4d065f5136c6a984c302799a79e4ade3e52701c95425fa2229dd6426886", [:mix], [{:exactor, "~> 2.2", [hex: :exactor, repo: "hexpm", optional: false]}, {:exjsx, "~> 4.0", [hex: :exjsx, repo: "hexpm", optional: false]}, {:finch, "~> 0.16", [hex: :finch, repo: "hexpm", optional: true]}, {:httpoison, "~> 1.0 or ~> 2.0", [hex: :httpoison, repo: "hexpm", optional: true]}, {:httpotion, "~> 3.1", [hex: :httpotion, repo: "hexpm", optional: true]}, {:ibrowse, "4.4.0", [hex: :ibrowse, repo: "hexpm", optional: true]}, {:meck, "~> 0.8", [hex: :meck, repo: "hexpm", optional: false]}], "hexpm", "de4fc18b1d672d9b72bc7468735e19779aa50ea963a1f859ef82cd9e294b13e3"}, + "exvcr": {:hex, :exvcr, "0.15.2", "2216c8605b5c3e300160c2a5bd896b4928fa51fc3fb3420d3e792ad833ac89ba", [:mix], [{:exactor, "~> 2.2", [hex: :exactor, repo: "hexpm", optional: false]}, {:exjsx, "~> 4.0", [hex: :exjsx, repo: "hexpm", optional: false]}, {:finch, "~> 0.16", [hex: :finch, repo: "hexpm", optional: true]}, {:httpoison, "~> 1.0 or ~> 2.0", [hex: :httpoison, repo: "hexpm", optional: true]}, {:httpotion, "~> 3.1", [hex: :httpotion, repo: "hexpm", optional: true]}, {:ibrowse, "4.4.0", [hex: :ibrowse, repo: "hexpm", optional: true]}, {:meck, "~> 0.8", [hex: :meck, repo: "hexpm", optional: false]}], "hexpm", "2bd4125889bd3953d7fbb7b388c34190c31e292f12896da56ecf0743d40439ed"}, "faker": {:hex, :faker, "0.18.0", "943e479319a22ea4e8e39e8e076b81c02827d9302f3d32726c5bf82f430e6e14", [:mix], [], "hexpm", "bfbdd83958d78e2788e99ec9317c4816e651ad05e24cfd1196ce5db5b3e81797"}, "file_system": {:hex, :file_system, "0.2.10", "fb082005a9cd1711c05b5248710f8826b02d7d1784e7c3451f9c1231d4fc162d", [:mix], [], "hexpm", "41195edbfb562a593726eda3b3e8b103a309b733ad25f3d642ba49696bf715dc"}, "gen_smtp": {:hex, :gen_smtp, "1.2.0", "9cfc75c72a8821588b9b9fe947ae5ab2aed95a052b81237e0928633a13276fd3", [:rebar3], [{:ranch, ">= 1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "5ee0375680bca8f20c4d85f58c2894441443a743355430ff33a783fe03296779"}, From ef3507c659b84a9008c4d9ea834de360b344fda6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 29 Sep 2024 22:58:44 +0800 Subject: [PATCH 9/9] build(deps): Bump bamboo from 2.3.0 to 2.3.1 (#1193) Bumps [bamboo](https://github.com/thoughtbot/bamboo) from 2.3.0 to 2.3.1. - [Release notes](https://github.com/thoughtbot/bamboo/releases) - [Changelog](https://github.com/beam-community/bamboo/blob/main/CHANGELOG.md) - [Commits](https://github.com/thoughtbot/bamboo/compare/v2.3.0...v2.3.1) --- updated-dependencies: - dependency-name: bamboo dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- mix.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mix.lock b/mix.lock index 2248e8483..562d80cdc 100644 --- a/mix.lock +++ b/mix.lock @@ -2,7 +2,7 @@ "arc": {:hex, :arc, "0.11.0", "ac7a0cc03035317b6fef9fe94c97d7d9bd183a3e7ce1606aa0c175cfa8d1ba6d", [:mix], [{:ex_aws, "~> 2.0", [hex: :ex_aws, repo: "hexpm", optional: true]}, {:ex_aws_s3, "~> 2.0", [hex: :ex_aws_s3, repo: "hexpm", optional: true]}, {:hackney, "~> 1.0", [hex: :hackney, repo: "hexpm", optional: false]}, {:poison, "~> 2.2 or ~> 3.1", [hex: :poison, repo: "hexpm", optional: true]}, {:sweet_xml, "~> 0.6", [hex: :sweet_xml, repo: "hexpm", optional: true]}], "hexpm", "e91a8bd676fca716f6e46275ae81fb96c0bbc7a9d5b96cac511ae190588eddd0"}, "arc_ecto": {:hex, :arc_ecto, "0.11.3", "52f278330fe3a29472ce5d9682514ca09eaed4b33453cbaedb5241a491464f7d", [:mix], [{:arc, "~> 0.11.0", [hex: :arc, repo: "hexpm", optional: false]}, {:ecto, ">= 2.1.0", [hex: :ecto, repo: "hexpm", optional: false]}], "hexpm", "24beed35003707434a778caece7d71e46e911d46d1e82e7787345264fc8e96d0"}, "artificery": {:hex, :artificery, "0.4.3", "0bc4260f988dcb9dda4b23f9fc3c6c8b99a6220a331534fdf5bf2fd0d4333b02", [:mix], [], "hexpm", "12e95333a30e20884e937abdbefa3e7f5e05609c2ba8cf37b33f000b9ffc0504"}, - "bamboo": {:hex, :bamboo, "2.3.0", "d2392a2cabe91edf488553d3c70638b532e8db7b76b84b0a39e3dfe492ffd6fc", [:mix], [{:hackney, ">= 1.15.2", [hex: :hackney, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:mime, "~> 1.4 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "dd0037e68e108fd04d0e8773921512c940e35d981e097b5793543e3b2f9cd3f6"}, + "bamboo": {:hex, :bamboo, "2.3.1", "85029339f01c3dd59071cfd2b7b18e826aa7fc172cc324d75603bb99d95b6544", [:mix], [{:hackney, ">= 1.15.2", [hex: :hackney, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:mime, "~> 1.4 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "895b2993ed195b2b0fa79c0d5a1d36aa529e817b6df257e4a10745459048d505"}, "bamboo_phoenix": {:hex, :bamboo_phoenix, "1.0.0", "f3cc591ffb163ed0bf935d256f1f4645cd870cf436545601215745fb9cc9953f", [:mix], [{:bamboo, ">= 2.0.0", [hex: :bamboo, repo: "hexpm", optional: false]}, {:phoenix, ">= 1.3.0", [hex: :phoenix, repo: "hexpm", optional: false]}], "hexpm", "6db88fbb26019c84a47994bb2bd879c0887c29ce6c559bc6385fd54eb8b37dee"}, "bamboo_ses": {:hex, :bamboo_ses, "0.4.4", "143afad1cffe07db9c68592d41a0685a2f950d3c31369f9da6030773a61b7566", [:mix], [{:bamboo, "~> 2.0", [hex: :bamboo, repo: "hexpm", optional: false]}, {:ex_aws, "~> 2.4", [hex: :ex_aws, repo: "hexpm", optional: false]}, {:gen_smtp, "~> 1.2.0", [hex: :gen_smtp, repo: "hexpm", optional: false]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "91740b6b1ab432ca2e41274d097bcf2239149d797acb2b1c4b0d07318bf8aa7e"}, "blankable": {:hex, :blankable, "1.0.0", "89ab564a63c55af117e115144e3b3b57eb53ad43ba0f15553357eb283e0ed425", [:mix], [], "hexpm", "7cf11aac0e44f4eedbee0c15c1d37d94c090cb72a8d9fddf9f7aec30f9278899"},