CREATE
OR
ALTER PROCEDURE dbo.USP_CreateBrewery(
    @BreweryName NVARCHAR(256),
    @Description NVARCHAR(512),
    @PostedByID UNIQUEIDENTIFIER,
    @CityID UNIQUEIDENTIFIER,
    @AddressLine1 NVARCHAR(256),
    @AddressLine2 NVARCHAR(256) = NULL,
    @PostalCode NVARCHAR(20),
    @Coordinates GEOGRAPHY = NULL
    )
    AS
BEGIN
    SET
NOCOUNT ON;
    SET
XACT_ABORT ON;

    IF
@BreweryName IS NULL
        THROW 50001, 'Brewery name cannot be null.', 1;

    IF
@Description IS NULL
        THROW 50002, 'Brewery description cannot be null.', 1;

    IF
NOT EXISTS (SELECT 1
                   FROM dbo.UserAccount
                   WHERE UserAccountID = @PostedByID)
        THROW 50404, 'User not found.', 1;

    IF
NOT EXISTS (SELECT 1
                   FROM dbo.City
                   WHERE CityID = @CityID)
        THROW 50404, 'City not found.', 1;

    DECLARE
@NewBreweryID UNIQUEIDENTIFIER = NEWID();
    DECLARE
@NewBrewerLocationID UNIQUEIDENTIFIER = NEWID();

BEGIN
TRANSACTION;

INSERT INTO dbo.BreweryPost
    (BreweryPostID, BreweryName, Description, PostedByID)
VALUES (@NewBreweryID, @BreweryName, @Description, @PostedByID);

INSERT INTO dbo.BreweryPostLocation
(BreweryPostLocationID, BreweryPostID, CityID, AddressLine1, AddressLine2, PostalCode, Coordinates)
VALUES (@NewBrewerLocationID, @NewBreweryID, @CityID, @AddressLine1, @AddressLine2, @PostalCode, @Coordinates);

COMMIT TRANSACTION;

SELECT @NewBreweryID        AS BreweryPostID,
       @NewBrewerLocationID AS BreweryPostLocationID;

END
