We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
User personal information cannot be changed
## Expected Behavior

User can change its personal information at any time using Settings page.

User should only be able to change their first and last name. The E-mail field should be grayed out.

## Actual Behavior

Form fields are filled with user data but there is no way to change them. User cannot modify these fields and there is no "Save" button available.

## Steps to Reproduce the Problem

  1. Go to Settings page.
  2. Open "User data" section.
  3. Done.

## Additional comment

Consider changing the name of the section from "User data" to something else.


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `backend/medtagger/api/users/service.py`
Content:
```
1 """Module responsible for defining endpoints for users administration."""
2 from typing import Any
3 
4 from flask import request
5 from flask_restplus import Resource
6 
7 from medtagger.api import api
8 from medtagger.api.users import serializers
9 from medtagger.api.users.business import get_all_users, set_user_role
10 from medtagger.api.utils import get_current_user
11 from medtagger.api.security import login_required, role_required
12 
13 users_ns = api.namespace('users', 'Users management')
14 
15 
16 @users_ns.route('/')
17 class GetUsers(Resource):
18     """Get all users endpoint."""
19 
20     @staticmethod
21     @login_required
22     @role_required('admin')
23     @users_ns.marshal_with(serializers.users_list)
24     @users_ns.doc(security='token')
25     def get() -> Any:
26         """Get all users endpoint."""
27         users = get_all_users()
28         return {'users': users}, 200
29 
30 
31 @users_ns.route('/<int:user_id>/role')
32 class SetRole(Resource):
33     """Set user's role."""
34 
35     @staticmethod
36     @login_required
37     @role_required('admin')
38     @users_ns.doc(security='token')
39     def put(user_id: int) -> Any:
40         """Set user's role."""
41         set_user_role(user_id, request.json['role'])
42         return {}, 204
43 
44 
45 @users_ns.route('/info')
46 class GetUserInfo(Resource):
47     """Get current user information."""
48 
49     @staticmethod
50     @login_required
51     @users_ns.marshal_with(serializers.user)
52     @users_ns.doc(security='token')
53     @users_ns.doc(responses={200: 'Successfully retrieved data.'})
54     def get() -> Any:
55         """Get user info."""
56         user = get_current_user()
57         return user, 200
58
```

Path: `backend/medtagger/repositories/users.py`
Content:
```
1 """Module responsible for definition of Users' Repository."""
2 from typing import List, Optional
3 
4 from medtagger.database import db_session
5 from medtagger.database.models import User
6 
7 
8 class UsersRepository(object):
9     """Repository for Users."""
10 
11     @staticmethod
12     def add_new_user(new_user: User) -> int:
13         """Add new user.
14 
15         :return: id of the new user
16         """
17         with db_session() as session:
18             session.add(new_user)
19         return new_user.id
20 
21     @staticmethod
22     def get_all_users() -> List[User]:
23         """Return list of all users."""
24         return User.query.order_by(User.id).all()
25 
26     @staticmethod
27     def get_user_by_email(user_email: str) -> Optional[User]:
28         """Get user with given email.
29 
30         :return Optional of User
31         """
32         return User.query.filter(User.email == user_email).first()
33 
34     @staticmethod
35     def get_user_by_id(user_id: int) -> User:
36         """Get user with given id."""
37         return User.query.filter(User.id == user_id).one()
38
```

Path: `backend/medtagger/api/users/business.py`
Content:
```
1 """Module responsible for business logic for users administration."""
2 from typing import List
3 
4 from medtagger.database.models import User
5 from medtagger.repositories.users import UsersRepository
6 from medtagger.repositories.roles import RolesRepository
7 
8 
9 def get_all_users() -> List[User]:
10     """Return list of all users."""
11     return UsersRepository.get_all_users()
12 
13 
14 def set_user_role(user_id: int, role_name: str) -> None:
15     """Set user's role. Old role is being replaced."""
16     RolesRepository.set_user_role(user_id, role_name)
17
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/backend/medtagger/api/users/business.py b/backend/medtagger/api/users/business.py
--- a/backend/medtagger/api/users/business.py
+++ b/backend/medtagger/api/users/business.py
@@ -1,6 +1,9 @@
 """Module responsible for business logic for users administration."""
 from typing import List
 
+from sqlalchemy.orm.exc import NoResultFound
+
+from medtagger.api import InvalidArgumentsException
 from medtagger.database.models import User
 from medtagger.repositories.users import UsersRepository
 from medtagger.repositories.roles import RolesRepository
@@ -14,3 +17,12 @@
 def set_user_role(user_id: int, role_name: str) -> None:
     """Set user's role. Old role is being replaced."""
     RolesRepository.set_user_role(user_id, role_name)
+
+
+def set_user_info(user_id: int, firstName: str, lastName: str) -> None:
+    """Set user's information."""
+    try:
+        user = UsersRepository.get_user_by_id(user_id)
+        UsersRepository.set_user_info(user, firstName, lastName)
+    except NoResultFound:
+        raise InvalidArgumentsException('User with this id does not exist.')
diff --git a/backend/medtagger/api/users/service.py b/backend/medtagger/api/users/service.py
--- a/backend/medtagger/api/users/service.py
+++ b/backend/medtagger/api/users/service.py
@@ -6,7 +6,7 @@
 
 from medtagger.api import api
 from medtagger.api.users import serializers
-from medtagger.api.users.business import get_all_users, set_user_role
+from medtagger.api.users.business import get_all_users, set_user_role, set_user_info
 from medtagger.api.utils import get_current_user
 from medtagger.api.security import login_required, role_required
 
@@ -55,3 +55,18 @@
         """Get user info."""
         user = get_current_user()
         return user, 200
+
+
+@users_ns.route('/<int:user_id>')
+class SetUserInfo(Resource):
+    """Set user's information (first name and last name)."""
+
+    @staticmethod
+    @login_required
+    @users_ns.doc(security='token')
+    def put(user_id: int) -> Any:
+        """Set user info."""
+        if get_current_user().id != user_id:
+            return {}, 403
+        set_user_info(user_id, request.json['firstName'], request.json['lastName'])
+        return {}, 204
diff --git a/backend/medtagger/repositories/users.py b/backend/medtagger/repositories/users.py
--- a/backend/medtagger/repositories/users.py
+++ b/backend/medtagger/repositories/users.py
@@ -35,3 +35,11 @@
     def get_user_by_id(user_id: int) -> User:
         """Get user with given id."""
         return User.query.filter(User.id == user_id).one()
+
+    @staticmethod
+    def set_user_info(user: User, firstName: str, lastName: str) -> None:
+        """Set user's info."""
+        with db_session() as session:
+            user.first_name = firstName
+            user.last_name = lastName
+            session.add(user)

{"golden_diff": "diff --git a/backend/medtagger/api/users/business.py b/backend/medtagger/api/users/business.py\n--- a/backend/medtagger/api/users/business.py\n+++ b/backend/medtagger/api/users/business.py\n@@ -1,6 +1,9 @@\n \"\"\"Module responsible for business logic for users administration.\"\"\"\n from typing import List\n \n+from sqlalchemy.orm.exc import NoResultFound\n+\n+from medtagger.api import InvalidArgumentsException\n from medtagger.database.models import User\n from medtagger.repositories.users import UsersRepository\n from medtagger.repositories.roles import RolesRepository\n@@ -14,3 +17,12 @@\n def set_user_role(user_id: int, role_name: str) -> None:\n     \"\"\"Set user's role. Old role is being replaced.\"\"\"\n     RolesRepository.set_user_role(user_id, role_name)\n+\n+\n+def set_user_info(user_id: int, firstName: str, lastName: str) -> None:\n+    \"\"\"Set user's information.\"\"\"\n+    try:\n+        user = UsersRepository.get_user_by_id(user_id)\n+        UsersRepository.set_user_info(user, firstName, lastName)\n+    except NoResultFound:\n+        raise InvalidArgumentsException('User with this id does not exist.')\ndiff --git a/backend/medtagger/api/users/service.py b/backend/medtagger/api/users/service.py\n--- a/backend/medtagger/api/users/service.py\n+++ b/backend/medtagger/api/users/service.py\n@@ -6,7 +6,7 @@\n \n from medtagger.api import api\n from medtagger.api.users import serializers\n-from medtagger.api.users.business import get_all_users, set_user_role\n+from medtagger.api.users.business import get_all_users, set_user_role, set_user_info\n from medtagger.api.utils import get_current_user\n from medtagger.api.security import login_required, role_required\n \n@@ -55,3 +55,18 @@\n         \"\"\"Get user info.\"\"\"\n         user = get_current_user()\n         return user, 200\n+\n+\n+@users_ns.route('/<int:user_id>')\n+class SetUserInfo(Resource):\n+    \"\"\"Set user's information (first name and last name).\"\"\"\n+\n+    @staticmethod\n+    @login_required\n+    @users_ns.doc(security='token')\n+    def put(user_id: int) -> Any:\n+        \"\"\"Set user info.\"\"\"\n+        if get_current_user().id != user_id:\n+            return {}, 403\n+        set_user_info(user_id, request.json['firstName'], request.json['lastName'])\n+        return {}, 204\ndiff --git a/backend/medtagger/repositories/users.py b/backend/medtagger/repositories/users.py\n--- a/backend/medtagger/repositories/users.py\n+++ b/backend/medtagger/repositories/users.py\n@@ -35,3 +35,11 @@\n     def get_user_by_id(user_id: int) -> User:\n         \"\"\"Get user with given id.\"\"\"\n         return User.query.filter(User.id == user_id).one()\n+\n+    @staticmethod\n+    def set_user_info(user: User, firstName: str, lastName: str) -> None:\n+        \"\"\"Set user's info.\"\"\"\n+        with db_session() as session:\n+            user.first_name = firstName\n+            user.last_name = lastName\n+            session.add(user)\n", "issue": "User personal information cannot be changed\n## Expected Behavior\r\n\r\nUser can change its personal information at any time using Settings page.\r\n\r\nUser should only be able to change their first and last name. The E-mail field should be grayed out.\r\n\r\n## Actual Behavior\r\n\r\nForm fields are filled with user data but there is no way to change them. User cannot modify these fields and there is no \"Save\" button available.\r\n\r\n## Steps to Reproduce the Problem\r\n\r\n  1. Go to Settings page.\r\n  2. Open \"User data\" section.\r\n  3. Done.\r\n\r\n## Additional comment\r\n\r\nConsider changing the name of the section from \"User data\" to something else.\r\n\n", "before_files": [{"content": "\"\"\"Module responsible for defining endpoints for users administration.\"\"\"\nfrom typing import Any\n\nfrom flask import request\nfrom flask_restplus import Resource\n\nfrom medtagger.api import api\nfrom medtagger.api.users import serializers\nfrom medtagger.api.users.business import get_all_users, set_user_role\nfrom medtagger.api.utils import get_current_user\nfrom medtagger.api.security import login_required, role_required\n\nusers_ns = api.namespace('users', 'Users management')\n\n\n@users_ns.route('/')\nclass GetUsers(Resource):\n    \"\"\"Get all users endpoint.\"\"\"\n\n    @staticmethod\n    @login_required\n    @role_required('admin')\n    @users_ns.marshal_with(serializers.users_list)\n    @users_ns.doc(security='token')\n    def get() -> Any:\n        \"\"\"Get all users endpoint.\"\"\"\n        users = get_all_users()\n        return {'users': users}, 200\n\n\n@users_ns.route('/<int:user_id>/role')\nclass SetRole(Resource):\n    \"\"\"Set user's role.\"\"\"\n\n    @staticmethod\n    @login_required\n    @role_required('admin')\n    @users_ns.doc(security='token')\n    def put(user_id: int) -> Any:\n        \"\"\"Set user's role.\"\"\"\n        set_user_role(user_id, request.json['role'])\n        return {}, 204\n\n\n@users_ns.route('/info')\nclass GetUserInfo(Resource):\n    \"\"\"Get current user information.\"\"\"\n\n    @staticmethod\n    @login_required\n    @users_ns.marshal_with(serializers.user)\n    @users_ns.doc(security='token')\n    @users_ns.doc(responses={200: 'Successfully retrieved data.'})\n    def get() -> Any:\n        \"\"\"Get user info.\"\"\"\n        user = get_current_user()\n        return user, 200\n", "path": "backend/medtagger/api/users/service.py"}, {"content": "\"\"\"Module responsible for definition of Users' Repository.\"\"\"\nfrom typing import List, Optional\n\nfrom medtagger.database import db_session\nfrom medtagger.database.models import User\n\n\nclass UsersRepository(object):\n    \"\"\"Repository for Users.\"\"\"\n\n    @staticmethod\n    def add_new_user(new_user: User) -> int:\n        \"\"\"Add new user.\n\n        :return: id of the new user\n        \"\"\"\n        with db_session() as session:\n            session.add(new_user)\n        return new_user.id\n\n    @staticmethod\n    def get_all_users() -> List[User]:\n        \"\"\"Return list of all users.\"\"\"\n        return User.query.order_by(User.id).all()\n\n    @staticmethod\n    def get_user_by_email(user_email: str) -> Optional[User]:\n        \"\"\"Get user with given email.\n\n        :return Optional of User\n        \"\"\"\n        return User.query.filter(User.email == user_email).first()\n\n    @staticmethod\n    def get_user_by_id(user_id: int) -> User:\n        \"\"\"Get user with given id.\"\"\"\n        return User.query.filter(User.id == user_id).one()\n", "path": "backend/medtagger/repositories/users.py"}, {"content": "\"\"\"Module responsible for business logic for users administration.\"\"\"\nfrom typing import List\n\nfrom medtagger.database.models import User\nfrom medtagger.repositories.users import UsersRepository\nfrom medtagger.repositories.roles import RolesRepository\n\n\ndef get_all_users() -> List[User]:\n    \"\"\"Return list of all users.\"\"\"\n    return UsersRepository.get_all_users()\n\n\ndef set_user_role(user_id: int, role_name: str) -> None:\n    \"\"\"Set user's role. Old role is being replaced.\"\"\"\n    RolesRepository.set_user_role(user_id, role_name)\n", "path": "backend/medtagger/api/users/business.py"}], "after_files": [{"content": "\"\"\"Module responsible for defining endpoints for users administration.\"\"\"\nfrom typing import Any\n\nfrom flask import request\nfrom flask_restplus import Resource\n\nfrom medtagger.api import api\nfrom medtagger.api.users import serializers\nfrom medtagger.api.users.business import get_all_users, set_user_role, set_user_info\nfrom medtagger.api.utils import get_current_user\nfrom medtagger.api.security import login_required, role_required\n\nusers_ns = api.namespace('users', 'Users management')\n\n\n@users_ns.route('/')\nclass GetUsers(Resource):\n    \"\"\"Get all users endpoint.\"\"\"\n\n    @staticmethod\n    @login_required\n    @role_required('admin')\n    @users_ns.marshal_with(serializers.users_list)\n    @users_ns.doc(security='token')\n    def get() -> Any:\n        \"\"\"Get all users endpoint.\"\"\"\n        users = get_all_users()\n        return {'users': users}, 200\n\n\n@users_ns.route('/<int:user_id>/role')\nclass SetRole(Resource):\n    \"\"\"Set user's role.\"\"\"\n\n    @staticmethod\n    @login_required\n    @role_required('admin')\n    @users_ns.doc(security='token')\n    def put(user_id: int) -> Any:\n        \"\"\"Set user's role.\"\"\"\n        set_user_role(user_id, request.json['role'])\n        return {}, 204\n\n\n@users_ns.route('/info')\nclass GetUserInfo(Resource):\n    \"\"\"Get current user information.\"\"\"\n\n    @staticmethod\n    @login_required\n    @users_ns.marshal_with(serializers.user)\n    @users_ns.doc(security='token')\n    @users_ns.doc(responses={200: 'Successfully retrieved data.'})\n    def get() -> Any:\n        \"\"\"Get user info.\"\"\"\n        user = get_current_user()\n        return user, 200\n\n\n@users_ns.route('/<int:user_id>')\nclass SetUserInfo(Resource):\n    \"\"\"Set user's information (first name and last name).\"\"\"\n\n    @staticmethod\n    @login_required\n    @users_ns.doc(security='token')\n    def put(user_id: int) -> Any:\n        \"\"\"Set user info.\"\"\"\n        if get_current_user().id != user_id:\n            return {}, 403\n        set_user_info(user_id, request.json['firstName'], request.json['lastName'])\n        return {}, 204\n", "path": "backend/medtagger/api/users/service.py"}, {"content": "\"\"\"Module responsible for definition of Users' Repository.\"\"\"\nfrom typing import List, Optional\n\nfrom medtagger.database import db_session\nfrom medtagger.database.models import User\n\n\nclass UsersRepository(object):\n    \"\"\"Repository for Users.\"\"\"\n\n    @staticmethod\n    def add_new_user(new_user: User) -> int:\n        \"\"\"Add new user.\n\n        :return: id of the new user\n        \"\"\"\n        with db_session() as session:\n            session.add(new_user)\n        return new_user.id\n\n    @staticmethod\n    def get_all_users() -> List[User]:\n        \"\"\"Return list of all users.\"\"\"\n        return User.query.order_by(User.id).all()\n\n    @staticmethod\n    def get_user_by_email(user_email: str) -> Optional[User]:\n        \"\"\"Get user with given email.\n\n        :return Optional of User\n        \"\"\"\n        return User.query.filter(User.email == user_email).first()\n\n    @staticmethod\n    def get_user_by_id(user_id: int) -> User:\n        \"\"\"Get user with given id.\"\"\"\n        return User.query.filter(User.id == user_id).one()\n\n    @staticmethod\n    def set_user_info(user: User, firstName: str, lastName: str) -> None:\n        \"\"\"Set user's info.\"\"\"\n        with db_session() as session:\n            user.first_name = firstName\n            user.last_name = lastName\n            session.add(user)\n", "path": "backend/medtagger/repositories/users.py"}, {"content": "\"\"\"Module responsible for business logic for users administration.\"\"\"\nfrom typing import List\n\nfrom sqlalchemy.orm.exc import NoResultFound\n\nfrom medtagger.api import InvalidArgumentsException\nfrom medtagger.database.models import User\nfrom medtagger.repositories.users import UsersRepository\nfrom medtagger.repositories.roles import RolesRepository\n\n\ndef get_all_users() -> List[User]:\n    \"\"\"Return list of all users.\"\"\"\n    return UsersRepository.get_all_users()\n\n\ndef set_user_role(user_id: int, role_name: str) -> None:\n    \"\"\"Set user's role. Old role is being replaced.\"\"\"\n    RolesRepository.set_user_role(user_id, role_name)\n\n\ndef set_user_info(user_id: int, firstName: str, lastName: str) -> None:\n    \"\"\"Set user's information.\"\"\"\n    try:\n        user = UsersRepository.get_user_by_id(user_id)\n        UsersRepository.set_user_info(user, firstName, lastName)\n    except NoResultFound:\n        raise InvalidArgumentsException('User with this id does not exist.')\n", "path": "backend/medtagger/api/users/business.py"}]}