Skip to main content
Glama
examples.ex6.67 kB
defmodule TestRepo.Examples do @moduledoc """ Examples module demonstrating usage of models and services. Similar to Python's examples directory, this shows how different modules work together. """ alias TestRepo.Models.{User, Item} alias TestRepo.Services.{UserService, ItemService, OrderService} defmodule UserManagement do @doc """ Creates a complete user workflow example. """ def run_user_example do # Start user service {:ok, user_service} = UserService.start_link() # Create users {:ok, alice} = UserService.create_user(user_service, "1", "Alice", "alice@example.com", ["admin"]) {:ok, bob} = UserService.create_user(user_service, "2", "Bob", "bob@example.com", ["user"]) # Get users {:ok, retrieved_alice} = UserService.get_user(user_service, "1") # List all users all_users = UserService.list_users(user_service) # Clean up GenServer.stop(user_service) %{ created_alice: alice, created_bob: bob, retrieved_alice: retrieved_alice, all_users: all_users } end @doc """ Demonstrates user role management. """ def manage_user_roles do user = User.new("role_user", "Role User", "role@example.com") # Add roles user_with_admin = User.add_role(user, "admin") user_with_multiple = User.add_role(user_with_admin, "moderator") # Check roles has_admin = User.has_role?(user_with_multiple, "admin") has_guest = User.has_role?(user_with_multiple, "guest") %{ original_user: user, user_with_roles: user_with_multiple, has_admin: has_admin, has_guest: has_guest } end end defmodule ShoppingExample do @doc """ Creates a complete shopping workflow. """ def run_shopping_example do # Create user and items user = User.new("customer1", "Customer One", "customer@example.com") item1 = Item.new("widget1", "Super Widget", 19.99, "electronics") item2 = Item.new("gadget1", "Cool Gadget", 29.99, "electronics") # Create order order = OrderService.create_order("order1", user) # Add items to order order_with_item1 = OrderService.add_item_to_order(order, item1) order_with_items = OrderService.add_item_to_order(order_with_item1, item2) # Process the order processed_order = OrderService.process_order(order_with_items) completed_order = OrderService.complete_order(processed_order) %{ user: user, items: [item1, item2], final_order: completed_order, total_cost: completed_order.total } end @doc """ Demonstrates item filtering and searching. """ def item_filtering_example do # Start item service {:ok, item_service} = ItemService.start_link() # Create various items ItemService.create_item(item_service, "laptop", "Gaming Laptop", 1299.99, "electronics") ItemService.create_item(item_service, "book", "Elixir Guide", 39.99, "books") ItemService.create_item(item_service, "phone", "Smartphone", 699.99, "electronics") ItemService.create_item(item_service, "novel", "Great Novel", 19.99, "books") # Get all items all_items = ItemService.list_items(item_service) # Filter by category electronics = ItemService.list_items(item_service, "electronics") books = ItemService.list_items(item_service, "books") # Clean up Agent.stop(item_service) %{ all_items: all_items, electronics: electronics, books: books, total_items: length(all_items), electronics_count: length(electronics), books_count: length(books) } end end defmodule IntegrationExample do @doc """ Runs a complete e-commerce scenario. """ def run_full_scenario do # Setup services container = TestRepo.Services.create_service_container() TestRepo.Services.setup_sample_data(container) # Get sample data {:ok, sample_user} = UserService.get_user(container.user_service, TestRepo.Services.sample_user_id()) {:ok, sample_item} = ItemService.get_item(container.item_service, TestRepo.Services.sample_item_id()) # Create additional items {:ok, premium_item} = ItemService.create_item( container.item_service, "premium", "Premium Product", 99.99, "premium" ) # Create order with multiple items order = OrderService.create_order("big_order", sample_user, [sample_item]) order_with_premium = OrderService.add_item_to_order(order, premium_item) # Process through order lifecycle processing_order = OrderService.process_order(order_with_premium) final_order = OrderService.complete_order(processing_order) # Serialize everything for output serialized_user = TestRepo.Services.serialize_model(sample_user) serialized_order = TestRepo.Services.serialize_model(final_order) # Clean up GenServer.stop(container.user_service) Agent.stop(container.item_service) %{ scenario: "full_ecommerce", user: serialized_user, order: serialized_order, total_revenue: final_order.total, items_sold: length(final_order.items) } end @doc """ Demonstrates error handling scenarios. """ def error_handling_example do {:ok, user_service} = UserService.start_link() # Try to create duplicate user {:ok, _user1} = UserService.create_user(user_service, "dup", "User", "user@example.com") duplicate_result = UserService.create_user(user_service, "dup", "Another User", "another@example.com") # Try to get non-existent user missing_user_result = UserService.get_user(user_service, "nonexistent") # Try to delete non-existent user delete_result = UserService.delete_user(user_service, "nonexistent") GenServer.stop(user_service) %{ duplicate_user_error: duplicate_result, missing_user_error: missing_user_result, delete_missing_error: delete_result } end end @doc """ Main function to run all examples. """ def run_all_examples do %{ user_management: UserManagement.run_user_example(), role_management: UserManagement.manage_user_roles(), shopping: ShoppingExample.run_shopping_example(), item_filtering: ShoppingExample.item_filtering_example(), integration: IntegrationExample.run_full_scenario(), error_handling: IntegrationExample.error_handling_example() } end end

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ryota-murakami/serena'

If you have feedback or need assistance with the MCP directory API, please join our Discord server