From f904c81824c9ce38a28e1f9e5425cdda35f6d88a Mon Sep 17 00:00:00 2001 From: Zoey de Souza Pessanha Date: Fri, 6 Sep 2024 16:29:57 -0300 Subject: [PATCH 01/10] extract common tasks aliases --- config/config.exs | 9 +-------- mix.exs | 4 +++- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/config/config.exs b/config/config.exs index 18a34de9..4a616e02 100644 --- a/config/config.exs +++ b/config/config.exs @@ -48,14 +48,7 @@ config :git_hooks, ], hooks: [ pre_push: [ - tasks: [ - "mix clean", - "mix compile --warning-as-errors", - "mix format --check-formatted", - "mix credo --strict", - "mix test --only unit", - "mix test --only integration" - ] + tasks: ["ci.check"] ] ] diff --git a/mix.exs b/mix.exs index 63052e88..c8a77e13 100644 --- a/mix.exs +++ b/mix.exs @@ -89,7 +89,9 @@ defmodule Pescarte.MixProject do "ecto.reset": ["ecto.drop", "ecto.setup", "seed"], test: ["ecto.create --quiet", "ecto.migrate --quiet", "test"], "assets.build": ["cmd --cd assets node build.js"], - "assets.deploy": ["cmd --cd assets node build.js --deploy", "phx.digest"] + "assets.deploy": ["cmd --cd assets node build.js --deploy", "phx.digest"], + lint: ["compile --warning-as-errors", "clean", "format --check-formatted", "credo --strict"], + "ci.check": ["lint", "test --only unit", "test --only integration"] ] end end From b9bf24dc67073160e015232f853d47ee75e5d082 Mon Sep 17 00:00:00 2001 From: juanzeen Date: Tue, 8 Oct 2024 23:41:19 -0300 Subject: [PATCH 02/10] feat: schema and migration created --- git | 0 lib/pescarte/blog/entity/tag.ex | 2 ++ lib/pescarte/blog/post.ex | 5 ++--- lib/pescarte/blog/posts_tags.ex | 18 ++++++++++++++++++ .../20241009022246_create_posts_tags.exs | 13 +++++++++++++ 5 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 git create mode 100644 lib/pescarte/blog/posts_tags.ex create mode 100644 priv/repo/migrations/20241009022246_create_posts_tags.exs diff --git a/git b/git new file mode 100644 index 00000000..e69de29b diff --git a/lib/pescarte/blog/entity/tag.ex b/lib/pescarte/blog/entity/tag.ex index d42a6d2a..28ff02df 100644 --- a/lib/pescarte/blog/entity/tag.ex +++ b/lib/pescarte/blog/entity/tag.ex @@ -5,6 +5,7 @@ defmodule Pescarte.Blog.Entity.Tag do use Pescarte, :model + alias Pescarte.Blog.Post alias Pescarte.Database.Types.PublicId @type t :: %Tag{nome: binary, id: binary} @@ -14,6 +15,7 @@ defmodule Pescarte.Blog.Entity.Tag do @primary_key {:id, PublicId, autogenerate: true} schema "blog_tag" do field :nome, :string + many_to_many :posts, Post, join_through: "post_tags" timestamps() end diff --git a/lib/pescarte/blog/post.ex b/lib/pescarte/blog/post.ex index 41cbbf58..3291e899 100644 --- a/lib/pescarte/blog/post.ex +++ b/lib/pescarte/blog/post.ex @@ -2,6 +2,7 @@ defmodule Pescarte.Blog.Post do @moduledoc """ Módulo que define o schema e o changeset para os posts. """ + alias Pescarte.Blog.Entity.Tag alias Pescarte.Database alias Pescarte.Database.Repo alias Pescarte.Database.Types.PublicId @@ -30,9 +31,7 @@ defmodule Pescarte.Blog.Post do field :published_at, :naive_datetime belongs_to :usuario, Usuario - - # comentado enquanto o PR das tags não é aprovado - # many_to_many :tags, Tag, through: [:post_tags, :tag] + many_to_many :tags, Tag, join_through: "posts_tags" timestamps() end diff --git a/lib/pescarte/blog/posts_tags.ex b/lib/pescarte/blog/posts_tags.ex new file mode 100644 index 00000000..508b907c --- /dev/null +++ b/lib/pescarte/blog/posts_tags.ex @@ -0,0 +1,18 @@ +defmodule Pescarte.Blog.PostsTags do + alias Pescarte.Blog.Entity.Tag + alias Pescarte.Blog.Post + # alias Pescarte.Database + # alias Pescarte.Database.Repo + # alias Pescarte.Database.Types.PublicId + # alias Pescarte.Identidades.Models.Usuario + use Pescarte, :model + + schema("posts_tags") do + belongs_to :post, Post + belongs_to :tag, Tag + timestamps() + end + + def changeset(changeset \\ %PostTag{}, opts) do + end +end diff --git a/priv/repo/migrations/20241009022246_create_posts_tags.exs b/priv/repo/migrations/20241009022246_create_posts_tags.exs new file mode 100644 index 00000000..63e9ad8e --- /dev/null +++ b/priv/repo/migrations/20241009022246_create_posts_tags.exs @@ -0,0 +1,13 @@ +defmodule Pescarte.Database.Repo.Migrations.CreatePostTags do + alias Pescarte.Blog.Entity.Tag + alias Pescarte.Blog.Post + use Ecto.Migration + + def change do + create table(:posts_tags) do + add :post_id, references(Post) + add :tag_id, references(Tag) + timestamps() + end + end +end From 36f7009c9265c879e5bc1a347af6dd3419e187aa Mon Sep 17 00:00:00 2001 From: juanzeen Date: Wed, 9 Oct 2024 21:44:46 -0300 Subject: [PATCH 03/10] feat: schema and migration finished --- lib/pescarte/blog/posts_tags.ex | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/lib/pescarte/blog/posts_tags.ex b/lib/pescarte/blog/posts_tags.ex index 508b907c..9bd98a1a 100644 --- a/lib/pescarte/blog/posts_tags.ex +++ b/lib/pescarte/blog/posts_tags.ex @@ -1,18 +1,19 @@ defmodule Pescarte.Blog.PostsTags do + @moduledoc """ + Módulo reponsável pelo relacionamento entre posts e tags. Nesse arquivo é feito o schema que permite + esse relacionamento NxN e também o + """ alias Pescarte.Blog.Entity.Tag alias Pescarte.Blog.Post - # alias Pescarte.Database - # alias Pescarte.Database.Repo - # alias Pescarte.Database.Types.PublicId - # alias Pescarte.Identidades.Models.Usuario - use Pescarte, :model + alias Pescarte.Database.Types.PublicId + use Ecto.Schema - schema("posts_tags") do + @primary_key {:id, PublicId, autogenerate: true} + schema "posts_tags" do belongs_to :post, Post belongs_to :tag, Tag timestamps() end - def changeset(changeset \\ %PostTag{}, opts) do - end + end From eb9f0130e522fda36a1e31548768fd055d9aff09 Mon Sep 17 00:00:00 2001 From: juanzeen Date: Wed, 9 Oct 2024 21:50:58 -0300 Subject: [PATCH 04/10] fix: format --- lib/pescarte/blog/posts_tags.ex | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/pescarte/blog/posts_tags.ex b/lib/pescarte/blog/posts_tags.ex index 9bd98a1a..f77c5256 100644 --- a/lib/pescarte/blog/posts_tags.ex +++ b/lib/pescarte/blog/posts_tags.ex @@ -14,6 +14,4 @@ defmodule Pescarte.Blog.PostsTags do belongs_to :tag, Tag timestamps() end - - end From 18955ba995a3c1ef13a6e10fa9a2e9b104812338 Mon Sep 17 00:00:00 2001 From: juanzeen Date: Wed, 9 Oct 2024 22:05:21 -0300 Subject: [PATCH 05/10] fix: migration errors --- priv/repo/migrations/20240814205931_create_post.exs | 2 +- priv/repo/migrations/20241009022246_create_posts_tags.exs | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/priv/repo/migrations/20240814205931_create_post.exs b/priv/repo/migrations/20240814205931_create_post.exs index f46c9aae..a023c699 100644 --- a/priv/repo/migrations/20240814205931_create_post.exs +++ b/priv/repo/migrations/20240814205931_create_post.exs @@ -2,7 +2,7 @@ defmodule Pescarte.Database.Repo.Migrations.CreatePost do use Ecto.Migration def change do - create table(:posts) do + create table(:posts, primary_key: false) do add :user_id, references(:usuario, type: :string), null: false add :titulo, :string add :conteudo, :binary diff --git a/priv/repo/migrations/20241009022246_create_posts_tags.exs b/priv/repo/migrations/20241009022246_create_posts_tags.exs index 63e9ad8e..c9aae719 100644 --- a/priv/repo/migrations/20241009022246_create_posts_tags.exs +++ b/priv/repo/migrations/20241009022246_create_posts_tags.exs @@ -1,12 +1,10 @@ defmodule Pescarte.Database.Repo.Migrations.CreatePostTags do - alias Pescarte.Blog.Entity.Tag - alias Pescarte.Blog.Post use Ecto.Migration def change do create table(:posts_tags) do - add :post_id, references(Post) - add :tag_id, references(Tag) + add :post_id, references(:posts, type: :string), null: false + add :tag_id, references(:tag, type: :string), null: false timestamps() end end From d68e1561e6ae37fe5aee3d8bc03332494c9eeb96 Mon Sep 17 00:00:00 2001 From: juanzeen Date: Wed, 9 Oct 2024 22:21:33 -0300 Subject: [PATCH 06/10] fix: fixing id in posts table --- priv/repo/migrations/20240814205931_create_post.exs | 1 + 1 file changed, 1 insertion(+) diff --git a/priv/repo/migrations/20240814205931_create_post.exs b/priv/repo/migrations/20240814205931_create_post.exs index a023c699..f1f6d549 100644 --- a/priv/repo/migrations/20240814205931_create_post.exs +++ b/priv/repo/migrations/20240814205931_create_post.exs @@ -3,6 +3,7 @@ defmodule Pescarte.Database.Repo.Migrations.CreatePost do def change do create table(:posts, primary_key: false) do + add :id, :string, primary_key: true add :user_id, references(:usuario, type: :string), null: false add :titulo, :string add :conteudo, :binary From 44832ed67203f635f3959a4b8334844cd0669b5a Mon Sep 17 00:00:00 2001 From: juanzeen Date: Sat, 12 Oct 2024 20:17:09 -0300 Subject: [PATCH 07/10] fix: fixing tag reference in post_tags migration --- priv/repo/migrations/20241009022246_create_posts_tags.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/priv/repo/migrations/20241009022246_create_posts_tags.exs b/priv/repo/migrations/20241009022246_create_posts_tags.exs index c9aae719..4b44cbdd 100644 --- a/priv/repo/migrations/20241009022246_create_posts_tags.exs +++ b/priv/repo/migrations/20241009022246_create_posts_tags.exs @@ -4,7 +4,7 @@ defmodule Pescarte.Database.Repo.Migrations.CreatePostTags do def change do create table(:posts_tags) do add :post_id, references(:posts, type: :string), null: false - add :tag_id, references(:tag, type: :string), null: false + add :tag_id, references(:blog_tag, type: :string), null: false timestamps() end end From a132403f4f67f6144ff308f84d593c3fb79fc92f Mon Sep 17 00:00:00 2001 From: juanzeen Date: Sat, 19 Oct 2024 14:19:51 -0300 Subject: [PATCH 08/10] fix: remove posttag schema and rename the migrations --- git | 0 lib/pescarte/blog/entity/tag.ex | 2 +- lib/pescarte/blog/post.ex | 4 ++-- lib/pescarte/blog/posts_tags.ex | 17 ----------------- ....exs => 20240814205931_create_blog_post.exs} | 6 +++--- .../20241009022246_create_posts_tags.exs | 2 +- 6 files changed, 7 insertions(+), 24 deletions(-) delete mode 100644 git delete mode 100644 lib/pescarte/blog/posts_tags.ex rename priv/repo/migrations/{20240814205931_create_post.exs => 20240814205931_create_blog_post.exs} (74%) diff --git a/git b/git deleted file mode 100644 index e69de29b..00000000 diff --git a/lib/pescarte/blog/entity/tag.ex b/lib/pescarte/blog/entity/tag.ex index 28ff02df..71cb09e3 100644 --- a/lib/pescarte/blog/entity/tag.ex +++ b/lib/pescarte/blog/entity/tag.ex @@ -15,7 +15,7 @@ defmodule Pescarte.Blog.Entity.Tag do @primary_key {:id, PublicId, autogenerate: true} schema "blog_tag" do field :nome, :string - many_to_many :posts, Post, join_through: "post_tags" + many_to_many :blog_posts, Post, join_through: "posts_tags" timestamps() end diff --git a/lib/pescarte/blog/post.ex b/lib/pescarte/blog/post.ex index 3291e899..d6c49a47 100644 --- a/lib/pescarte/blog/post.ex +++ b/lib/pescarte/blog/post.ex @@ -31,12 +31,12 @@ defmodule Pescarte.Blog.Post do field :published_at, :naive_datetime belongs_to :usuario, Usuario - many_to_many :tags, Tag, join_through: "posts_tags" + many_to_many :blog_tags, Tag, join_through: "posts_tags" timestamps() end - @spec changeset(t, map) :: changeset + @spec changeset(Post.t(), map) :: changeset def changeset(post \\ %Post{}, params) do post |> cast(params, @required_params) diff --git a/lib/pescarte/blog/posts_tags.ex b/lib/pescarte/blog/posts_tags.ex deleted file mode 100644 index f77c5256..00000000 --- a/lib/pescarte/blog/posts_tags.ex +++ /dev/null @@ -1,17 +0,0 @@ -defmodule Pescarte.Blog.PostsTags do - @moduledoc """ - Módulo reponsável pelo relacionamento entre posts e tags. Nesse arquivo é feito o schema que permite - esse relacionamento NxN e também o - """ - alias Pescarte.Blog.Entity.Tag - alias Pescarte.Blog.Post - alias Pescarte.Database.Types.PublicId - use Ecto.Schema - - @primary_key {:id, PublicId, autogenerate: true} - schema "posts_tags" do - belongs_to :post, Post - belongs_to :tag, Tag - timestamps() - end -end diff --git a/priv/repo/migrations/20240814205931_create_post.exs b/priv/repo/migrations/20240814205931_create_blog_post.exs similarity index 74% rename from priv/repo/migrations/20240814205931_create_post.exs rename to priv/repo/migrations/20240814205931_create_blog_post.exs index f1f6d549..19fa55dd 100644 --- a/priv/repo/migrations/20240814205931_create_post.exs +++ b/priv/repo/migrations/20240814205931_create_blog_post.exs @@ -2,7 +2,7 @@ defmodule Pescarte.Database.Repo.Migrations.CreatePost do use Ecto.Migration def change do - create table(:posts, primary_key: false) do + create table(:blog_post, primary_key: false) do add :id, :string, primary_key: true add :user_id, references(:usuario, type: :string), null: false add :titulo, :string @@ -13,7 +13,7 @@ defmodule Pescarte.Database.Repo.Migrations.CreatePost do timestamps() end - create unique_index(:posts, :titulo) - create index(:posts, :user_id) + create unique_index(:blog_post, :titulo) + create index(:blog_post, :user_id) end end diff --git a/priv/repo/migrations/20241009022246_create_posts_tags.exs b/priv/repo/migrations/20241009022246_create_posts_tags.exs index 4b44cbdd..3fb5a187 100644 --- a/priv/repo/migrations/20241009022246_create_posts_tags.exs +++ b/priv/repo/migrations/20241009022246_create_posts_tags.exs @@ -3,8 +3,8 @@ defmodule Pescarte.Database.Repo.Migrations.CreatePostTags do def change do create table(:posts_tags) do - add :post_id, references(:posts, type: :string), null: false add :tag_id, references(:blog_tag, type: :string), null: false + add :post_id, references(:blog_post, type: :string), null: false timestamps() end end From 4c8d59caf48a74cd575b9f6ef59f6cd16f7d7cf2 Mon Sep 17 00:00:00 2001 From: juanzeen Date: Fri, 25 Oct 2024 17:46:26 -0300 Subject: [PATCH 09/10] fix: remaking blog_post and post_tag migration --- lib/pescarte/blog/entity/tag.ex | 11 +++++++++++ lib/pescarte/blog/post.ex | 10 ++++++---- ..._post.exs => 20241025203509_create_blog_posts.exs} | 6 +++--- ...ts_tags.exs => 20241025203733_create_post_tag.exs} | 4 ++-- 4 files changed, 22 insertions(+), 9 deletions(-) rename priv/repo/migrations/{20240814205931_create_blog_post.exs => 20241025203509_create_blog_posts.exs} (73%) rename priv/repo/migrations/{20241009022246_create_posts_tags.exs => 20241025203733_create_post_tag.exs} (66%) diff --git a/lib/pescarte/blog/entity/tag.ex b/lib/pescarte/blog/entity/tag.ex index 71cb09e3..8b99394c 100644 --- a/lib/pescarte/blog/entity/tag.ex +++ b/lib/pescarte/blog/entity/tag.ex @@ -64,6 +64,17 @@ defmodule Pescarte.Blog.Entity.Tag do end end + @spec upsert_tag(list(Tag.t())) :: {:ok, Tag.t()} + def upsert_tag(tags) do + for t <- tags do + Repo.insert!( + %Tag{nome: t}, + on_conflict: [set: [nome: t]], + conflict_target: :nome + ) + end + end + @spec delete_tag(String.t()) :: :ok | {:error, :not_found} def delete_tag(id) do query = from(t in Tag, where: t.id == ^id) diff --git a/lib/pescarte/blog/post.ex b/lib/pescarte/blog/post.ex index d6c49a47..92ff2950 100644 --- a/lib/pescarte/blog/post.ex +++ b/lib/pescarte/blog/post.ex @@ -2,6 +2,7 @@ defmodule Pescarte.Blog.Post do @moduledoc """ Módulo que define o schema e o changeset para os posts. """ + alias Ecto.Multi alias Pescarte.Blog.Entity.Tag alias Pescarte.Database alias Pescarte.Database.Repo @@ -55,10 +56,11 @@ defmodule Pescarte.Blog.Post do end @spec create_post(Post.t()) :: {:ok, Post.t()} | {:error, Ecto.Changeset.t()} - def create_post(params) do - %Post{} - |> Post.changeset(params) - |> Repo.insert() + def create_post(params = %Post{blog_tags: tags}) do + Multi.new() + |> Multi.update(:blog_tag, Tag.upsert_tag(tags)) + # fazer upload da capa da imagem via o Client da Supabase Storage a ser criado + |> Multi.insert(:blog_post, Post.changeset(%Post{}, params)) end @spec delete_post(String.t()) :: {:ok, Post.t()} | {:error, :not_found} diff --git a/priv/repo/migrations/20240814205931_create_blog_post.exs b/priv/repo/migrations/20241025203509_create_blog_posts.exs similarity index 73% rename from priv/repo/migrations/20240814205931_create_blog_post.exs rename to priv/repo/migrations/20241025203509_create_blog_posts.exs index 19fa55dd..b4db4bb7 100644 --- a/priv/repo/migrations/20240814205931_create_blog_post.exs +++ b/priv/repo/migrations/20241025203509_create_blog_posts.exs @@ -2,7 +2,7 @@ defmodule Pescarte.Database.Repo.Migrations.CreatePost do use Ecto.Migration def change do - create table(:blog_post, primary_key: false) do + create table(:blog_posts, primary_key: false) do add :id, :string, primary_key: true add :user_id, references(:usuario, type: :string), null: false add :titulo, :string @@ -13,7 +13,7 @@ defmodule Pescarte.Database.Repo.Migrations.CreatePost do timestamps() end - create unique_index(:blog_post, :titulo) - create index(:blog_post, :user_id) + create unique_index(:blog_posts, :titulo) + create index(:blog_posts, :user_id) end end diff --git a/priv/repo/migrations/20241009022246_create_posts_tags.exs b/priv/repo/migrations/20241025203733_create_post_tag.exs similarity index 66% rename from priv/repo/migrations/20241009022246_create_posts_tags.exs rename to priv/repo/migrations/20241025203733_create_post_tag.exs index 3fb5a187..748048e3 100644 --- a/priv/repo/migrations/20241009022246_create_posts_tags.exs +++ b/priv/repo/migrations/20241025203733_create_post_tag.exs @@ -2,9 +2,9 @@ defmodule Pescarte.Database.Repo.Migrations.CreatePostTags do use Ecto.Migration def change do - create table(:posts_tags) do + create table(:post_tag) do add :tag_id, references(:blog_tag, type: :string), null: false - add :post_id, references(:blog_post, type: :string), null: false + add :post_id, references(:blog_posts, type: :string), null: false timestamps() end end From 94f96353a2c4ce086e7544fad5ac0ae4c779f6b7 Mon Sep 17 00:00:00 2001 From: juanzeen Date: Fri, 25 Oct 2024 17:51:09 -0300 Subject: [PATCH 10/10] fix: fixing mix credo --- lib/pescarte/blog/entity/tag.ex | 13 ------------- lib/pescarte/blog/post.ex | 17 ++++++++--------- 2 files changed, 8 insertions(+), 22 deletions(-) diff --git a/lib/pescarte/blog/entity/tag.ex b/lib/pescarte/blog/entity/tag.ex index 8b99394c..d42a6d2a 100644 --- a/lib/pescarte/blog/entity/tag.ex +++ b/lib/pescarte/blog/entity/tag.ex @@ -5,7 +5,6 @@ defmodule Pescarte.Blog.Entity.Tag do use Pescarte, :model - alias Pescarte.Blog.Post alias Pescarte.Database.Types.PublicId @type t :: %Tag{nome: binary, id: binary} @@ -15,7 +14,6 @@ defmodule Pescarte.Blog.Entity.Tag do @primary_key {:id, PublicId, autogenerate: true} schema "blog_tag" do field :nome, :string - many_to_many :blog_posts, Post, join_through: "posts_tags" timestamps() end @@ -64,17 +62,6 @@ defmodule Pescarte.Blog.Entity.Tag do end end - @spec upsert_tag(list(Tag.t())) :: {:ok, Tag.t()} - def upsert_tag(tags) do - for t <- tags do - Repo.insert!( - %Tag{nome: t}, - on_conflict: [set: [nome: t]], - conflict_target: :nome - ) - end - end - @spec delete_tag(String.t()) :: :ok | {:error, :not_found} def delete_tag(id) do query = from(t in Tag, where: t.id == ^id) diff --git a/lib/pescarte/blog/post.ex b/lib/pescarte/blog/post.ex index 92ff2950..41cbbf58 100644 --- a/lib/pescarte/blog/post.ex +++ b/lib/pescarte/blog/post.ex @@ -2,8 +2,6 @@ defmodule Pescarte.Blog.Post do @moduledoc """ Módulo que define o schema e o changeset para os posts. """ - alias Ecto.Multi - alias Pescarte.Blog.Entity.Tag alias Pescarte.Database alias Pescarte.Database.Repo alias Pescarte.Database.Types.PublicId @@ -32,12 +30,14 @@ defmodule Pescarte.Blog.Post do field :published_at, :naive_datetime belongs_to :usuario, Usuario - many_to_many :blog_tags, Tag, join_through: "posts_tags" + + # comentado enquanto o PR das tags não é aprovado + # many_to_many :tags, Tag, through: [:post_tags, :tag] timestamps() end - @spec changeset(Post.t(), map) :: changeset + @spec changeset(t, map) :: changeset def changeset(post \\ %Post{}, params) do post |> cast(params, @required_params) @@ -56,11 +56,10 @@ defmodule Pescarte.Blog.Post do end @spec create_post(Post.t()) :: {:ok, Post.t()} | {:error, Ecto.Changeset.t()} - def create_post(params = %Post{blog_tags: tags}) do - Multi.new() - |> Multi.update(:blog_tag, Tag.upsert_tag(tags)) - # fazer upload da capa da imagem via o Client da Supabase Storage a ser criado - |> Multi.insert(:blog_post, Post.changeset(%Post{}, params)) + def create_post(params) do + %Post{} + |> Post.changeset(params) + |> Repo.insert() end @spec delete_post(String.t()) :: {:ok, Post.t()} | {:error, :not_found}